从nGram令牌过滤器上的es文档中了解一下:
"settings" : { "analysis" : { "analyzer" : { "my_ngram_analyzer" : { "tokenizer" : "my_ngram_tokenizer" } }, "tokenizer" : { "my_ngram_tokenizer" : { "type" : "nGram", "min_gram" : "2", "max_gram" : "3", "token_chars": [ "letter", "digit" ] } } } }注意事项
您需要添加
mynGram
到分析仪中,否则将无法使用。他们的工作方式就是这样。每个索引字段都应用了一个分析器,一个分析器是 一个 标记器,后跟 零个或多个 标记过滤器。您已经定义了一个不错的nGram标记生成器(mynGram
)来使用,但是您没有在中使用它customAnalyzer
,而是使用了standard
标记生成器。(基本上,您只是在定义但从未使用过mynGram
。)您需要告诉elasticsearch
customAnalyzer
在您的映射中使用您的:"properties": {"string_field": {"type": "string", "index_analyzer": customAnalyzer" }}您应该将更
maxGram
改为更大的数字(可能是10),否则4个字母的搜索将不会完全像自动完成一样(或可能不返回任何值,具体取决于搜索时间分析器)。使用
_analyze
api端点测试您的分析器。东西线这应该工作。
curl -XGET’http:
//yourserver.com
:9200?index_name/_analyze?analyzer=customAnalyzer’-d’rlewis’
祝好运!



