Tsquery返回完全匹配的关键字

时间:2013-08-08 14:49:04

标签: postgresql full-text-search tokenize

我有一个像

这样的查询
  

从mytable中选择* posttext @@ to_tsquery('Intelence');

我只想返回与关键字“Intelence”而不是“intel”完全匹配的结果,我该如何在postgresql中执行此操作?

感谢。

1 个答案:

答案 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 mecat字典中simple的搜索不匹配,因为复数,或bother,因为未提及的字词不相同。

如果您想要制作个别例外,您可以编辑tsearch2使用的english字典并定义包含所需更改的自定义字典,然后在您想要的查询中使用该字典而不是english例外。同样,您必须使用相同的字典来创建索引和查询。

这可能需要多个全文索引,这从降低更新/插入/删除速度和内存使用效率角度来看是非常不受欢迎的。