Каталог помогает человеку выбрать один объект среди многих: мастерскую, курс, специалиста или место. Его полезность зависит прежде всего от качества карточек, происхождения данных, фильтров и правил обновления. «Добавить поиск с ИИ» не исправит неполные записи и не сделает актуальными давно не проверенные ссылки.
Пример: каталог кружков для подростков
Представим локальный справочник занятий. Посетитель хочет найти кружок по району и возрасту, сравнить формат и перейти к организатору. Сначала определи минимальную модель карточки:
| Поле | Пример значения | Проверка качества |
|---|---|---|
| Название | «Робототехника, группа начинающих» | уникально ли в рамках источника? |
| Категория | «Техническое творчество» | согласована ли таксономия? |
| Район | «Центральный» | задан ли справочник районов? |
| Возраст | диапазон, подтверждённый организатором | известны ли обе границы? |
| Формат | очно/онлайн | не выводится ли из адреса автоматически? |
| Источник | URL организатора | доступна ли страница для проверки? |
| Проверено | дата проверки сведений | когда нужно повторить проверку? |
Не заполняй неизвестные поля догадками. «Подходит 12–16 лет», «есть набор» и «бесплатно» — изменяемые факты, у которых должен быть источник и дата проверки. Если достоверного значения нет, покажи «не указано» или исключи этот фильтр.
От структуры карточки к фильтрам
Пользовательские вопросы подсказывают, какие поля нужны: «рядом», «для моего возраста», «очно», «по выходным». Фильтр должен опираться на отдельное поле или проверяемое представление расписания, а не искать случайные слова по всему описанию. Для конкретных категорий и районов выбери закрытые значения и объясни, если фильтры комбинируются через И или ИЛИ.
В этом каталоге фильтры по району, возрасту и формату должны опираться на проверенные поля, а не на свободное описание. Если нужен поиск по словам или смыслу, выбор между полнотекстовым и семантическим механизмом и набор сравнительных запросов разобраны отдельно в руководстве по поиску. Здесь достаточно зафиксировать, какие поля фильтруются точно, как сочетаются условия и что показывать при пустом результате.
Индекс ускоряет определённые запросы, но не делает каталог полнее: PostgreSQL документирует типы индексов и соответствующие им операторы (Index Types). Сначала проверь фактический запрос и набор данных, затем выбирай индекс.
Попроси ИИ спроектировать не только карточку
Сделай каталог кружков. Сначала предложи модель записи и словари для категории, района, возраста и формата. Не заполняй неизвестные значения и не придумывай кружки. Затем составь таблицу фильтров, комбинаций и пустых состояний. Для каждой карточки покажи источник и дату последней проверки. Предложи тестовый набор запросов с ожидаемыми результатами; пока используй явно демонстрационные записи.
После ответа проверь, что одна запись не имеет конфликтующих значений (например, в тексте указан один район, а поле — другой), а категория не создаёт десяток синонимичных тегов. Если исходники приходят из разных сайтов, храни ссылку, время импорта и факт ручной проверки отдельно. Не склеивай похожие названия в один объект без надёжного ключа.
Обновление — часть функции каталога
Назначь владельца данных и правило устаревания. Например, ответственная команда раз в установленный ею период перепроверяет источник, а недоступные/изменившиеся страницы уходят в очередь на проверку. Период выбирается исходя из того, как быстро меняются занятия; он не универсален. У каждого поля может быть собственная актуальность: адрес стабилен дольше, чем расписание набора.
Для первого прототипа можно помечать тестовые карточки и обновлять вручную. Главное — не показывать тестовые данные как настоящий локальный справочник. На странице карточки сообщай, когда информация проверялась и куда обратиться за последним подтверждением.
Приёмка
Проверь карточку с отсутствующими полями; комбинирование фильтров; пустую выдачу; опечатку; дубликаты; нерабочую ссылку; просроченную дату проверки; новую запись, пришедшую из источника. Отдельно посмотри, может ли посетитель понять, почему элемент попал в результаты. Начинай с простого фильтра; усложняй поиск, только если список запросов выявил конкретный провал. Для внутреннего хранения каталога и прав на изменение смотри проектирование схемы данных, а для смыслового ранжирования — разбор видов поиска.
