Подключение синонимов

Добрый день!
Подскажите, пожалуйста, как правильно подключать синонимы, которые должны заменяться на несколько терминов?

Мы подключили к индексу стоп-слова (среди которых есть предлог "для"), морфологию, и хотим, чтобы следующие фразы были взаимозаменяемы, поэтому добавили синонимы таким образом:

  • для женщин, женский => для женщин, женский
  • для автомобиля, для авто, автомобильный => для автомобиля, для авто, автомобильный

Предполагалось, что если мы вводим поисковый запрос " женский рюкзак" он должен заменяться на "(женский|для женщин) рюкзак", а по факту происходит поиск "(женский|для) (рюкзак|женщин)", потому Эластик разбивает термин "женский" на такие токены:

"tokens": [
{
"token": "женский",
"start_offset": 0,
"end_offset": 7,
"type": "SYNONYM",
"position": 0
},
{
"token": "женщина",
"start_offset": 0,
"end_offset": 7,
"type": "SYNONYM",
"position": 1
}
]
}

Т.е. второй синоним "женщина" подключается для термина с индексом [1] в запросе, что неправильно. Аналогичная ситуация с запросами "автомобильный фильтр" или "женский компьютер" - из-за подобной работы синонимов в индексах находится много лишних документов.

Подскажите, можно ли настроить синонимы так, чтобы они подмешивались в запрос корректно?

Хотелось бы, чтобы по запросам типа:
"фильтр для автомобиля"
"фильтр для авто"
"фильтр автомобильный"
"автомобильный фильтр"
и т.д.
находились одни и те же документы в индексе.

Да, это известная проблема. Для версии 2.x она хорошо описана в руководстве. Хорошего решения до 5.x, по сути, не было. Но в 5.2.0, такое решение появилось.

Другое возможное решение - для вообще выбросить как stop word.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.