条板箱db edge_ngram搜索分析器更改

时间:2018-06-25 09:21:23

标签: analyzer crate

我创建了自定义分析器。

 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选项对我来说还不够,因为某些搜索包含多个单词,但没有短语。 谢谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,CrateDB使用在列定义上定义的同一分析器来分析搜索项。如果使用edge_ngram令牌生成器/令牌过滤器,这通常不是您想要的(在您的情况下,它将搜索词分解为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');

这应该导致预期的匹配。