Postgresql全文搜索部分单词

时间:2010-12-27 16:01:04

标签: postgresql full-text-search

postresql是否能够根据'half'一词进行全文搜索? 例如,我正在尝试搜索"tree",但我告诉postgres搜索"tr"

我找不到能够做到这一点的解决方案。

目前我正在使用

 select * from test, to_tsquery('tree') as q where vectors @@ q ;

但我想做这样的事情:

 select * from test, to_tsquery('tr%') as q where vectors @@ q ;

4 个答案:

答案 0 :(得分:20)

您可以使用tsearch前缀匹配,请参阅http://www.postgresql.org/docs/9.0/interactive/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES

postgres=# select to_tsvector('tree') @@ to_tsquery('tr:*');
 ?column? 
----------
 t
(1 row)

它只适用于前缀搜索,而不是你想要在单词中的任何位置进行部分匹配。

答案 1 :(得分:10)

听起来你只想要通配符匹配。

  • 如前所述,一个选项是三元组。我(非常)有限的经验是,在我喜欢的大型桌子上它太慢了(有些情况比LIKE慢)。 正如我所说,我对三卦的体验有限,所以我可能错误地使用它。

  • 您可以使用的第二个选项是 wildspeed 模块:http://www.sai.msu.su/~megera/wiki/wildspeed (你必须建立并安装这个)。

第二个选项也适用于后缀/中间匹配。可能会或可能不会超出您的期望。

有一些警告(如索引的大小),因此请仔细阅读该页面。

答案 2 :(得分:2)

可以用三元组来完成,但它不是tsearch2的一部分。

您可以在此处查看手册:http://www.postgresql.org/docs/9.0/interactive/pgtrgm.html

基本上pg_tgrm模块所做的是在所有部分中分割一个单词,以便它可以搜索那些单独的部分。

答案 3 :(得分:2)

从test中选择*,to_tsquery('tree')为q,其中vectors @@ q或xxxx LIKE('%tree%')

':*'用于指定前缀匹配。