При таком запросе (Брал hunspell словарь с
https://cgit.freedesktop.org/libreoffice/dictionar...)
GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "hunspell",
"locale": "ru_RU"
},
{
"type": "synonym",
"synonyms": [
"разогрев, прогрев"
]
}
],
"text": "разогрев"
}
получаю ошибку
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "failed to build synonyms"
}
],
"type": "illegal_argument_exception",
"reason": "failed to build synonyms",
"caused_by": {
"type": "parse_exception",
"reason": "Invalid synonym rule at line 1",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "term: разогрев analyzed to a token (разогреть) with position increment != 1 (got: 0)"
}
}
},
"status": 400
}
Выяснил, что конфликт возникает когда hunspell находит несколько основ для слова, которое встречается в списке синонимов (при этом, само слово не обязано находится в запросе). Так например, для слова "разогрев" находит две основы:
{
"tokenizer": "standard",
"filter": [
{
"type": "hunspell",
"locale": "ru_RU"
}
],
"text": "разогрев"
}
{
"tokens": [
{
"token": "разогрев",
"start_offset": 0,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "разогреть",
"start_offset": 0,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 0
}
]
}
Насколько я понял, проблема в том, что оба токена имеют position: 0 (`with position increment != 1 (got: 0)`).
Подскажите, какие у проблемы есть решения