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 ;
答案 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%')
':*'用于指定前缀匹配。