这个结果对我来说很有意义。Ke并且Kerber是不同的词,因此它们在全文搜索中不匹配。
全文搜索只进行词干提取- 删除复数等 - 以便cats匹配cat. 即使这也不是很聪明 -dice不处理非典型复数。它也仅适用于目标语言词典中识别的单词,因此即使Kerber是它的复数Ke也不会在语言设置为english.
请参阅 tsquery 和 tsvectors:
regress=> SELECT to_tsvector('Kerber'), to_tsquery('Kerber'), to_tsvector('ke'), to_tsquery('ke');
to_tsvector | to_tsquery | to_tsvector | to_tsquery
-------------+------------+-------------+------------
'kerber':1 | 'kerber' | 'ke':1 | 'ke'
(1 row)
和比赛:
regress=> SELECT to_tsvector('Kerber') @@ to_tsquery('Kerber'), to_tsvector('kerber') @@ to_tsquery('ke');
?column? | ?column?
----------+----------
t | f
(1 row)
我怀疑你想要一个tsearch 前缀匹配。这用:*通配符表示:
regress=> SELECT to_tsvector('kerber') @@ to_tsquery('ke:*');
?column?
----------
t
(1 row)
这仅适用于前缀匹配。它可能会对搜索效率产生影响,但我认为这不是主要影响。