所以,让我们说我搜索'Blerg'。我有一件东西的名字叫什么东西。
如果我在postgres(和rails)中进行ILIKE搜索,如下所示:
where("name ILIKE ?", "%#{ 'Blerg' }%")
字符串
它将返回结果'SomethingBlergSomething',因为它包含Blerg。
有没有一种方法可以让更快的tsvector在单词内部进行类似的搜索:
where("(to_tsvector('english', name) @@ to_tsquery(?))", ('Blerg' + ':*'))
型
上面的查询不会返回'SomethingBlergSomething'。
那么,我如何让tsvector在搜索单词内部时像ILIKE一样工作呢?
1条答案
按热度按时间jdgnovmf1#
你知道由附加模块pg_trgm提供的三元组搜索吗?这似乎比文本搜索更适合您的用例。
有了三元组索引(GIN或GiST),您可以使用原始的
ILIKE
predicate 并获得对它的索引支持。你需要Postgres 9.1+。详细信息: