postgres и неожиданное соответствие to_tsquery - PullRequest
0 голосов
/ 25 мая 2018

Рассмотрим следующее:

CREATE TEMPORARY TABLE foo (string text);
INSERT INTO foo VALUES
    ('the small but capable man'),
    ('the small and strong but capable man');
SELECT * FROM foo WHERE to_tsvector(string) @@ to_tsquery('small<->but');
SELECT * FROM foo WHERE to_tsvector(string) @@ to_tsquery('small<->capable');
SELECT * FROM foo WHERE to_tsvector(string) @@ to_tsquery('small<2>capable');

Первый запрос возвращает обе строки, когда он должен возвращать только одну (потому что small but отображается только один раз как полная фраза).Второй запрос запроса правильно не возвращает строк, потому что small и capable никогда не находятся рядом друг с другом.Третий правильно возвращает только один, потому что small и capable находятся в двух от друг друга.

Итак, вопрос: почему первый запрос возвращает обе строки?Есть ли что-то уникальное в таких словах, как but (или, может быть, and и т. Д.)?

1 Ответ

0 голосов
/ 26 мая 2018

ах, ответ: по умолчанию используется словарь english, который исключает стоп-слова по умолчанию (and, but и т. Д.) - чтобы действительно соответствовать всему, я использую словарь simple, напримерSELECT * FROM foo WHERE to_tsvector('simple',string) @@ to_tsquery('simple','small<->but').

Подробнее здесь .

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