Postgresql postgres和意外查询匹配

Postgresql postgres和意外查询匹配,postgresql,Postgresql,考虑以下几点: 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 fo

考虑以下几点:

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和capable从不相邻。第三个正确地只返回一个,因为small和capable在两个之内


所以问题是:为什么第一个查询同时返回两个字符串?像but或maybe and等词有什么独特之处吗?

啊,回答:这是默认使用英语词典,默认情况下不包括停止词和,但是,等等-为了真正匹配所有内容,我使用简单词典,例如选择*FROM foo WHERE to_tsvector'simple',string@@to_tsquery'simple',smallbut