查询
SELECT to_tsvector('recreation') @@ to_tsquery('recreatio:*');
返回false也是如此。是娱乐的前缀'。这似乎是因为'娱乐'作为其词干存储,'撤退'。例如,如果我们通过运行
故意破坏词干分析算法 SELECT to_tsvector('recreation1') @@ to_tsquery('recreatio:*');
查询返回true。
有没有办法让第一个查询匹配?
答案 0 :(得分:1)
根据问题的年龄,不确定这个答案是否有用,但是:
看来你是对的:
select ts_lexize('english_stem','recreation');
输出
ts_lexize
-----------
{recreat}
(1 row)
此外,*可以附加到词位以指定前缀匹配:
SELECT to_tsquery('supern:*A & star:A*B');
这样的lexeme将匹配以给定字符串开头的tsvector中的任何单词。
所以似乎没有办法让原始查询匹配。
人们可以回过头来寻找词干和查询的部分匹配,例如:使用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, ' '))
);
(也许茎的阵列可以以更优雅的方式形成。)