postgres和意外的to_tsquery匹配

时间:2018-05-25 18:51:34

标签: 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 foo WHERE to_tsvector(string) @@ to_tsquery('small<->capable');
SELECT * FROM foo WHERE to_tsvector(string) @@ to_tsquery('small<2>capable');

第一个查询返回两个行,当它只返回一个时(因为small but只出现一次作为完整短语)。第二个查询查询正确地不返回任何行,因为smallcapable永远不会彼此相邻。第三个正确地只返回一个,因为smallcapable在两个之内。

所以问题是:为什么第一个查询返回两个字符串?对于像but(或者可能是and等)这样的词有什么独特之处吗?

1 个答案:

答案 0 :(得分:1)

啊,回答:默认使用english词典,默认情况下排除停用词(andbut等) - 要真正匹配所有内容,我使用simple字典,例如SELECT * FROM foo WHERE to_tsvector('simple',string) @@ to_tsquery('simple','small<->but')

More here

相关问题