PostgreSQL полнотекстовый поиск удаляет строки из выбора - PullRequest
0 голосов
/ 24 апреля 2019

Полнотекстовый поиск не показывает никаких значений по определенным лексемам.

Хотя этот код возвращает true:

SELECT to_tsvector('ispell_russian', description)
       @@ to_tsquery('ispell_russian', 'сам')
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5 
  AND id=366020;

результат следующего выбора пуст:

SELECT *
FROM callcenter.points_cardsservices
INNER JOIN callcenter.units ON recipientname = name
WHERE units.deptid = 5
  AND id=366020
  AND to_tsvector('ispell_russian', description)
      @@ to_tsquery('ispell_russian', 'сам');

Слово, которое я ищу, раньше было в списке стоп-слов. Может ли это вызвать такие проблемы? Кроме того, у to_tsvector('ispell_russian', description) есть индекс.

1 Ответ

1 голос
/ 24 апреля 2019

Вы никогда не найдете стоп-слово, потому что оно отфильтровывается еще до начала поиска.

Но вы говорите, что использовал в качестве стоп-слова. Если вы изменили список стоп-слов, вы изменили поведение IMMUTABLE (!) Функции to_tsvector('ispell_russian', $1), которую вы использовали в индексе.

Если вы измените поведение индексированной неизменяемой функции, индекс будет поврежден. Вам придется использовать REINDEX INDEX для перестройки индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...