Полнотекстовый поиск PostgreSQL удаляет строки из выбора

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

Хотя этот код возвращает 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) имеет индекс.


person Arli Chokoev    schedule 24.04.2019    source источник


Ответы (1)


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

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

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

person Laurenz Albe    schedule 24.04.2019