У меня есть индекс Elasticsearch, в котором я установил "max_ngram_diff": 50
, но почему-то он работает только для токенизатора edge_ngram
, но не для токенизатора ngram
.
I ' Мы сделали два запроса на один и тот же URL http://localhost:9201/index-name/_analyze
:
Запрос 1
{
"tokenizer":
{
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
},
"text": "1234567890;abcdefghijklmn;"
}
Запрос 2
{
"tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
},
"text": "1234567890;abcdefghijklmn;"
}
Первый запрос возвращает ожидаемый результат:
{
"tokens": [
{
"token": "123",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "1234",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 1
},
{
"token": "12345",
"start_offset": 0,
"end_offset": 5,
"type": "word",
"position": 2
},
{
"token": "123456",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 3
},
// more tokens
]
}
Но второй запрос только возвращает это:
{
"error": {
"root_cause": [
{
"type": "remote_transport_exception",
"reason": "[ffe18f1a89e6][172.18.0.3:9300][indices:admin/analyze[s]]"
}
],
"type": "illegal_argument_exception",
"reason": "The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: [1] but was [17]. This limit can be set by changing the [index.max_ngram_diff] index level setting."
},
"status": 400
}
Что случилось, тот первый запрос с edge_ngram
токенизатором может иметь большую разницу между max_gram
и min_gram
, чем 1
, но второй запрос с токенизатором ngram
не может?
Это мое отображение:
{
"settings": {
"index": {
"max_ngram_diff": 50,
// further settings
}
}
}
Используемая версия elastisearch: 7.2.0
Спасибо за помощь!