vorahkas
@vorahkas
Люблю интерфейсы. Использую ReactJS

Как правильно сделать полнотекстовый поиск по неполному соответствию в PostgresQL?

Делаю автокомплит для поисковой строкина сайте.
Выполняя поиск по 8 млн текстовых записей столкнулся с такой проблемой: полнотекстовый поиск postgres далеко не всегда выдает результаты по неполному соответствию, а через ILIKE получается медленно. Эта же задача в MySQL решается запросами, которые указаны ниже и выполняется очень быстро.

Есть ли в postgres аналогичные mysql запросы? Можно ли решить проблему иначе?
SELECT DISTINCT name FROM entities WHERE MATCH (name) AGAINST ('центр*' IN BOOLEAN MODE) LIMIT 10;
SELECT DISTINCT name FROM entities WHERE MATCH (name) AGAINST ('+энергос* +цен*' IN BOOLEAN MODE) LIMIT 10;
  • Вопрос задан
  • 814 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Это делается с помощью "дерева": символ - узел (ID) и связка к следующему за ним (их несколько строк, разумеется). Создаётся такое поисковое "дерево" на основе текста и индексируются ID-шники.
После этого - всё работает мгновенно:
1. глубину просмотра - устанавливаете динамически, в зависимости от найденных результатов.
2. все промежуточные запросы (их результаты) - кэшируем!
UPD:
Налетай! Не боись! Почитать рукопись! (с)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zoroda
@zoroda
Необычный Fullstack
Тут описание использования полнотекстового поиска вместе с нечётким. См. F.41.5. Интеграция с текстовым поиском
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы