如何使用全文搜索进行中后缀匹配?

Sli*_*lim 5 postgresql full-text-search

我正在尝试在 Postgres 上使用 FTS 在数据库中查找字符串:

select name
from users
where to_tsvector('simple', name) @@ to_tsquery('simple', 'ad:*')
Run Code Online (Sandbox Code Playgroud)

:*搜索只有以广告开头的词。

我发现这个问题 Get partial match from Get partial match from GIN indexed TSVECTORcolumn column。

但是没有提到如何使用FTS解决中后缀匹配的问题?

Nei*_*gan 7

全文搜索中的“Full”表示匹配完整单词,而不是单词的部分内容

您应该使用 RegExp 或 LIKE 或三元组匹配来代替

可以通过反转索引中的单词并反转查询来模拟后缀匹配,但这会占用更多空间:

select
reverse('brown fox')::tsvector @@ (reverse('rown') || ':*')::tsquery --true
Run Code Online (Sandbox Code Playgroud)


jja*_*nes 2

我认为 FTS 不可能做到这一点。对于 来说,这似乎是一个更好的工作pg_trgm,它可以加速likeilike(及其符号形式 ~~ 和 ~~*)。