edge_ngram和ngram是ElasticSearch自带的两个分词器,一般设置索引映射的时候都会用到,设置完步长之后,就可以直接给解析器analyzer的tokenizer赋值使用。
二、怎么使用完整的索引结构:
{
"settings": {
"index.max_ngram_diff": 10,
"number_of_shards": 128,
"number_of_replicas": 2,
"refresh_interval": "5s",
"blocks": {
"read_only_allow_delete": "false"
},
"analysis": {
"analyzer": {
"ngram_analyzer" : {
"tokenizer" : "ngram_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer" : {
"token_chars" : [
"letter",
"digit"
],
"min_gram" : "1",
"type" : "ngram",
"max_gram" : "10"
}
}
}
},
"mappings" : {
"_routing" : {
"required" : true
},
"properties" : {
"id" : {
"type" : "long"
},
"username" : {
"type" : "text",
"fields" : {
"ngram" : {
"type" : "text",
"analyzer" : "ngram_analyzer"
}
}
},
"password" : {
"type" : "long"
},
"createTime" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis"
}
}
}
}
大概就是在setting中引入分词器,ngram_tokenizer里设置类型type为edge_ngram或者ngram,然后mapping中需要作ngram分词的字段指定一下就可以了。需要注意的是es7以后的版本min_gram和max_gram的粒度默认是不大于1,如果需要大于1需要设置index.max_ngram_diff大于它们的差值。
三、ngram和edge_ngram类型两者的区别edge_ngram分词效果
ngram分词效果



