Как исправить Elasticsearch конфликт hunspell и синонимов?

При таком запросе (Брал 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)`).
Подскажите, какие у проблемы есть решения
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 300 000 до 400 000 ₽
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
LIME Москва
от 280 000 до 350 000 ₽