PostgreSQL全文搜索部分单词

19

PostgreSQL能否基于“半个”单词进行全文搜索?例如,我想搜索"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个回答

27

1
这正是我寻找的方向。但我对与“tr:*”相等的单词很感兴趣(在你的例子中)。是否可能只返回那些单词? - Grezly
好的,根据你所写的内容,像这样SELECT * FROM test WHERE vectors @@ to_tsquery('tr:*')应该可以。或者你是想知道tsvector字段内匹配的每个单词吗?我认为你不能这样做... - Magnus Hagander
我确实需要与我的输入相匹配的字段/单词。 - Grezly

12

看起来你只是想要通配符匹配。

  • 一个选项,如先前提到的,是三元组。我的(非常)有限的经验表明,对于我来说,在大型表上速度太慢了(某些情况下甚至比LIKE还慢)。正如我所说,我的三元组经验有限,所以我可能使用不正确。

  • 第二个选项是wildspeed模块:http://www.sai.msu.su/~megera/wiki/wildspeed (你需要构建和安装它)。

第二个选项也适用于后缀/中间匹配。这可能比你所寻找的更多或更少。

有一些注意事项(例如索引的大小),因此请仔细阅读该页面。


4
自2008年以来,wildspeed相关的内容不是已经成为PostgreSQL核心的一部分了吗? - simon
以上问题有任何答案吗? - Rodrigo
wildspeed自2008年以来就没有更新了,所以除非它已经是核心的一部分,否则我会使用pg_trgrm扩展。 - RichVel

5
select * from test, to_tsquery('tree') as q 
where vectors @@ q OR xxxx LIKE ('%tree%')

“:*” 是指定前缀匹配的意思。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接