postgresql 让postgres全文搜索(tsvector)像ILIKE一样搜索单词内部?

3npbholx  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(120)

所以,让我们说我搜索'Blerg'。我有一件东西的名字叫什么东西。
如果我在postgres(和rails)中进行ILIKE搜索,如下所示:

where("name ILIKE ?", "%#{ 'Blerg' }%")

字符串
它将返回结果'SomethingBlergSomething',因为它包含Blerg。
有没有一种方法可以让更快的tsvector在单词内部进行类似的搜索:

where("(to_tsvector('english', name) @@ to_tsquery(?))", ('Blerg' + ':*'))


上面的查询不会返回'SomethingBlergSomething'。
那么,我如何让tsvector在搜索单词内部时像ILIKE一样工作呢?

jdgnovmf

jdgnovmf1#

你知道由附加模块pg_trgm提供的三元组搜索吗?这似乎比文本搜索更适合您的用例。
有了三元组索引(GIN或GiST),您可以使用原始的ILIKE predicate 并获得对它的索引支持。你需要Postgres 9.1+。
详细信息:

相关问题