Рассмотрим следующее:
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
и т. Д.)?