我创建了自定义分析器。
create ANALYZER analyzer_test (TOKENIZER standard,TOKEN_FILTERS (
asciifolding,
lowercase,
myedge WITH (type='edge_ngram',min_gram=3,max_gram=20) ));
我在数据库中搜索例如“ 兄弟”。结果是这样的。
兄弟
眉毛
棕色
可以,但是我搜索“ 浏览”。结果是一样的。
兄弟
眉毛
棕色
但是我只想找到以“ 浏览”开头。该怎么做。
眉毛
棕色
编辑:我的自定义分析器具有asiifolding。因此,当我搜索“çan”时,通常会列出结果,例如“çan”,“ can”,“çanak” 、。但是,如果我使用标准分析器来分析查询字词,则会遇到另一个问题。当我搜索“çan”时,没有结果。总而言之,我想要这样的东西。我必须使用asciifolding。我想列出以“查询词”开头的结果。短语和phrase_prefix选项对我来说还不够,因为某些搜索包含多个单词,但没有短语。 谢谢。
答案 0 :(得分:0)
默认情况下,CrateDB使用在列定义上定义的同一分析器来分析搜索项。如果使用edge_ngram
令牌生成器/令牌过滤器,这通常不是您想要的(在您的情况下,它将搜索词分解为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');
这应该导致预期的匹配。