Избегание «запроса текстового поиска содержит только стоп-слова или не содержит лексем, игнорируется» в журналах postgresql - PullRequest
2 голосов
/ 07 февраля 2012

Я использую текстовую библиотеку (https://github.com/tenderlove/texticle) для полнотекстового поиска postgresql.

Библиотека генерирует sql следующим образом:

to_tsvector('spanish', "games"."system"::text) @@ plainto_tsquery('spanish', 'Genesis'::text)

Если кто-то ищет «&», я получаю предупреждение в своих журналах:

text-search query contains only stop words or doesn't contain lexemes, ignored

Как мне избежать этого? Должен ли я знать приложение о различныхстоп-слова и не отправлять postgresql запрос, если поисковый термин состоит только из стоп-слов? Или я могу сказать postgresql как-то игнорировать это предупреждение?

Ответы [ 3 ]

1 голос
/ 21 февраля 2014

Эту функцию можно использовать для разрешения, если запрос содержит только стоп-слова:

numnode (plainto_tsquery ('spanish', '&')) = 0)

0 голосов
/ 01 мая 2013

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

В противном случае вы можете установить уровень ведения журнала на ОШИБКУ, чтобы предупреждения не устанавливались, или вы можете обработать его в своем приложении.Уровень.

Ничто из этого не идеально.Если я ищу «the», я должен получить похожее предупреждение, чтобы вы, вероятно, захотели проверить его после преобразования в tsquery (т. Е. В самой базе данных.

В противном случае мой совет - игнорировать предупреждение.

0 голосов
/ 15 февраля 2012

лично я всегда дезинфицирую вводимые пользователем данные.Это следует считать злом по большей части.так что в этом случае я бы определенно сделал некоторую фильтрацию на уровне приложения.

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