板条箱数据库edge_ngram搜索分析器更改



我创建了自定义分析器。

create ANALYZER analyzer_test (TOKENIZER standard,TOKEN_FILTERS (
asciifolding, 
lowercase, 
myedge WITH (type='edge_ngram',min_gram=3,max_gram=20) ));

我在我的数据库中搜索,例如">兄弟"。结果是这样的。

兄弟

眉头

棕色

没关系,但是,我搜索">眉毛"。结果是一样的。

兄弟

眉头

棕色

但我只想找到以">眉毛"开头。怎么能做到这一点。

眉头

棕色

编辑:我的自定义分析器具有腹水折叠。所以通常当我搜索"çan"时,结果会像这样列出"çan"、"can"、"çanak"、。但是,如果我使用标准分析器来分析查询词,我遇到了另一个问题。当我搜索"çan"时没有结果。总之,我想要这样的东西。我必须使用腹水折叠。我想列出以"查询词"开头的结果。短语和phrase_prefix选项对我来说是不够的,因为一些搜索有多个单词但没有短语。 谢谢。

默认情况下,CrateDB 使用与列定义中定义的分析器相同的分析器来分析搜索词。如果是edge_ngram分词器/token_filter这通常不是您想要的(在您的情况下,它会将搜索词分析为brobrow并搜索两个令牌(。可以通过向match谓词添加选项来定义自定义搜索分析器,请参阅 https://crate.io/docs/crate/reference/en/latest/general/dql/fulltext.html#predicates-match。

使用standard分析器分析查询词的示例:

select * from my_table where match(my_string, 'brow') using best_fields with(analyzer='standard');

这应该会导致预期的匹配。

最新更新