我有一个像
这样的查询从mytable中选择* posttext @@ to_tsquery('Intelence');
我只想返回与关键字“Intelence”而不是“intel”完全匹配的结果,我该如何在postgresql中执行此操作?
感谢。
答案 0 :(得分:5)
除非您想通过更改文本搜索词典来告诉PostgreSQL不要干 Intelence
,否则无法使用全文搜索。 Pg不包括索引中的单词,只包括词干:
regress=> SELECT to_tsvector('english', 'Intelence');
to_tsvector
-------------
'intel':1
(1 row)
您可以使用simple
字典完全抑制词干:
regress=> SELECT to_tsvector('simple','Intelence');
to_tsvector
---------------
'intelence':1
(1 row)
但必须在索引上完成,不能按查询执行,更不用说每个搜索词了。因此,文字cats are bothering me
与cat
字典中simple
的搜索不匹配,因为复数,或bother
,因为未提及的字词不相同。
如果您想要制作个别例外,您可以编辑tsearch2使用的english
字典并定义包含所需更改的自定义字典,然后在您想要的查询中使用该字典而不是english
例外。同样,您必须使用相同的字典来创建索引和查询。
这可能需要多个全文索引,这从降低更新/插入/删除速度和内存使用效率角度来看是非常不受欢迎的。