Postgresql Tsquery返回精确匹配的关键字

Postgresql Tsquery返回精确匹配的关键字,postgresql,full-text-search,tokenize,Postgresql,Full Text Search,Tokenize,我有一个类似的问题 从mytable中选择*,其中posttext@@to_tsquery('Intelence') 我只想返回与关键字“Intelence”而不是“intel”完全匹配的结果,如何在postgresql中实现这一点 谢谢。这在全文搜索中是不可能的,除非您想通过更改文本搜索词典告诉PostgreSQL不要阻止Intelence。Pg不包括索引中的单词,仅包括词干: regress=> SELECT to_tsvector('english', 'Intelence');

我有一个类似的问题

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

我只想返回与关键字“Intelence”而不是“intel”完全匹配的结果,如何在postgresql中实现这一点


谢谢。

这在全文搜索中是不可能的,除非您想通过更改文本搜索词典告诉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)
但这必须在索引上完成,不能每次查询都这样做,更不用说每个搜索词了。因此,文本
猫烦我了
简单
词典中的
搜索不匹配,因为复数,或者
麻烦
因为未插入的单词不相同

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


这可能会导致您需要多个全文索引,从减慢更新/插入/删除速度的角度以及从内存使用效率的角度来看,这是非常不可取的。

为什么不
像“%Intelence%”这样的posttext?如果您需要更复杂的东西,也可以使用regexp。谢谢您的解释。所以也许我应该用两个步骤:1。选择到表中使用@@to_tsquery('Intelence');2.使用“select like”查询从表1中找到确切的短语“Intelence”@seed Yes,这是一个合理的选择。甚至可以使用“~*”\minelence\M”仅在单词边界处匹配离散单词。