Обновить

Создание системы по управлению цифровыми активами для базы данных PostGIS. Часть 2. Работа с текстом

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели4.9K
Рейтинг0
Комментарии4

Комментарии 4

В статье рассмотрены варианты поиска. Хотелось бы, кроме этого получить какие-нибудь рекомендации в каких случаях использовать тот или иной вариант.

Спасибо за вопрос!

  • Классический поиск (операторы LIKE, ILIKE, POSIX-регулярные выражения) эффективен, когда важен порядок слов. Он идеально подходит для поиска конкретной фразы или словосочетания. А регулярные выражения позволяют искать не только по жёстко заданной фразе, но и по гибким шаблонам.

  • Полнотекстовый поиск (индексирование текста) работает не с точными формами слов, а с набором лексем (так называемый "мешок слов"). Он приводит слова из запроса к их основе (нормальной форме) и отбрасывает стоп-слова, что позволяет находить релевантные документы даже при наличии грамматических вариаций (падежей, чисел и т.д.). В этом его главное отличие от классического поиска.

  • Семантический поиск (векторизованный/эмбеддинги) оперирует не словами, а смыслами. Это позволяет находить релевантные тексты, даже если они сформулированы другими словами или не содержат прямых вхождений терминов из поискового запроса.

Если рассматривать этот вопрос в контексте создания информационной системы, то пользователю, как правило, нет дела до технической сложности поиска: он просто хочет получить лучший результат. Поэтому архитектура системы должна скрывать эту сложность. Пользовательский запрос стоит отправлять на все виды поиска параллельно, после чего агрегировать результаты, суммируя их веса (score). В топ выдачи попадают записи, набравшие максимальную сумму баллов по итогам всех обработок. Для продвинутых пользователей можно добавить настройку, позволяющую вручную выбрать, какие механизмы использовать (три по умолчанию или же один, два).

Уточню вопрос. Как правило обычный пользователь не знает, что творится под капотом, он просто пишет в поисковой строке запрос. Вопрос, как построить процесс поиска (пайплайн), чтобы выдать релевантный результат. Если пользователю дать на выбор способы поиска, то этого пользователя надо с начало погрузить в механику этих способов поиска, а к этому не готов.

Например, был в свое время реализован полнотекстовый поиск, но оказалось, что в ряде случаев, этот поиск не находит, то что может найти классический поиск, поэтому был реализован одновременный поиск и результаты обоих поисков складывался.

Можете поделиться своим опытом?

Например, был в свое время реализован полнотекстовый поиск, но оказалось, что в ряде случаев, этот поиск не находит, то что может найти классический поиск, поэтому был реализован одновременный поиск и результаты обоих поисков складывался.

Ваш подход верный. Уточню лишь пару моментов:

  • UX/UI. На странице есть поле для ввода поискового запроса пользователя. Рядом с этим полем расположены дополнительные настройки (выпадающий список/спойлер), в которых по умолчанию стоят везде "галочки" (checkbox) для всех 3-x видов поиска.

  • Формирование результата. Поиск осуществляется параллельно. Например, для каждого вида поиска находим топ-10 наиболее релевантных результатов и затем их агрегируем: суммируем score и сортируем по нему, убираем дубли. В итоге получим топ-30 найденных объектов или меньше т.к. могут быть найдены одни и те же объекты при различных видах поиска - это дубли и они будут удалены при агрегации.

Надеюсь, я ответил на ваш вопрос)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации