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

Min*_*ure 4 postgresql search full-text-search ruby-on-rails tsvector

所以我想说我会搜索'Blerg'.我有一个名为SomethingblergSomething的项目.

如果我在postgres(和rails)中进行ILIKE搜索,如下所示:

where("name ILIKE ?", "%#{ 'Blerg' }%")
Run Code Online (Sandbox Code Playgroud)

它将返回结果'SomethingBlergSomething',因为它包含Blerg.

有没有办法让更快的tsvector在单词中进行类似的搜索方式:

where("(to_tsvector('english', name) @@ to_tsquery(?))", ('Blerg' + ':*'))
Run Code Online (Sandbox Code Playgroud)

上面的查询不会返回'SomethingBlergSomething'.

那么在搜索单词时如何让tsvector像ILIKE一样行事.

Erw*_*ter 6

您是否知道由附加模块pg_trgm提供的trigram搜索?这似乎比文本搜索更适合您的用例.

使用三元组索引(GIN或GiST),您可以使用原始ILIKE谓词并获得索引支持.你需要Postgres 9.1+.

细节: