4

我有一个像这样的查询

select * from mytable where posttext @@ to_tsquery('Intelence');

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

谢谢。

4

1 回答 1

8

这在全文搜索中是不可能的,除非您想通过更改文本搜索字典来告诉 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因为未词干的词不一样。simplebother

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

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

于 2013-08-08T15:37:03.150 回答