我创建了自定义分析器。
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这通常不是您想要的(在您的情况下,它会将搜索词分析为bro
和brow
并搜索两个令牌(。可以通过向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');
这应该会导致预期的匹配。