我遇到过类似的问题,下面的错误消息清楚地解释了该问题。
[400]
{“错误”:{“root_cause”:[{“类型”:“illegal_argument_exception”,“原因”:“
NGram Tokenizer 中 max_gram 和 min_gram 之间的差异必须是
小于或等于:1 https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html#_configuration_16但是[49]。这个限制可以通过设置
更改 [index.max_ngram_diff] 索引级别
设置。"}],"type":"illegal_argument_exception","reason":"
NGram Tokenizer 中 max_gram 和 min_gram 之间的差异必须是
小于或等于:1 https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html#_configuration_16但是[49]。这个限制可以通过设置
更改 [index.max_ngram_diff] 索引级别
设置。"},"状态":400}
基本上,默认情况下,NGram Tokenizer 中 max_gram 和 min_gram 之间的差异不能超过 1,如果您希望更改此设置,则需要在索引设置中通过添加以下设置来更改它。
"max_ngram_diff" : "50" --> you can mention this number accoding to your requirement.
下面是我的索引设置,您可以在其中看到我的差异47
in my max_gram
and min_gram
因此设定max_ngram_diff
to 50
.
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"prefix": {
"type": "custom",
"filter": [
"lowercaseFilter"
],
"tokenizer": "edgeNGramTokenizer"
}
},
"tokenizer": {
"edgeNGramTokenizer": {
"token_chars": [
"letter",
"digit"
],
"min_gram": "1",
"type": "edgeNGram",
"max_gram": "40"
},
"loginNGram": {
"type": "nGram",
"min_gram": "3",
"max_gram": "50"
}
}
},
"number_of_shards": "1",
"number_of_replicas": "0",
"max_ngram_diff" : "50"
}
}
}
Edit:添加一个official https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html#_configuration_16Elastic 文档,解释了 max_gram 的默认长度为 2,min_gram 的默认长度为 1,因此它们之间的默认差异不能超过 1,因此出现异常。然后从同一个文档中摘取片段
索引级别设置index.max_ngram_diff控制最大
max_gram 和 min_gram 之间允许存在差异。