查询SELECT to_tsvector('recreation') @@ to_tsquery('recreatio:*');
即使'recreati'是'recreation'的前缀,也返回false。发生这种情况似乎是因为“娱乐”被存储为词根“重新创建”。例如,如果我们故意通过运行来破坏词干算法SELECT to_tsvector('recreation1') @@ to_tsquery('recreatio:*');
查询返回true。
有没有办法使第一个查询匹配?
最佳答案
考虑到问题的年龄,不确定该答案是否有用,但是:
关于词干
看来您是对的:
select ts_lexize('english_stem','recreation');
输出 ts_lexize
-----------
{recreat}
(1 row)
然后documentation说因此,似乎没有办法使原始查询匹配。
基于部分匹配的解决方案
可以退一步来寻找词干和查询的部分匹配,例如使用
pg_trgm
扩展名:SELECT (to_tsvector('recreation creation') @@ to_tsquery('recreatio:*')) or
'recreatio:*' % any (
select trim(both '''' from regexp_split_to_table(strip(to_tsvector('recreation creation'))::text, ' '))
);
(也许可以以更优雅的方式形成茎的排列。)关于postgresql - Postgres阻止比赛,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31999511/