Postgresql全文搜索部分单词

Gre*_*zly 14 postgresql full-text-search

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

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

目前我正在使用

 select * from test, to_tsquery('tree') as q where vectors @@ q ;
Run Code Online (Sandbox Code Playgroud)

但是我想做这样的事情:

 select * from test, to_tsquery('tr%') as q where vectors @@ q ;
Run Code Online (Sandbox Code Playgroud)

Mag*_*der 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)
Run Code Online (Sandbox Code Playgroud)

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


cat*_*ave 10

听起来你只是想要通配符匹配.

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

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

第二个选项也适用于后缀/中间匹配.哪个可能比你想要的还要多.

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

  • 自2008年以来,没有那些庞大的东西成为PostreSQL核心的一部分......? (4认同)

Lec*_*Lao 5

select * from test, to_tsquery('tree') as q 
where vectors @@ q OR xxxx LIKE ('%tree%')
Run Code Online (Sandbox Code Playgroud)

':*' 是指定前缀匹配。