Как вычислить оценку в ElasticSearch только для подмножества массива - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть поле в ElasticSearch, которое индексирует массив строк описания.Есть ли способ создать счет, который учитывает только одну из этих строк?

Например, у меня есть следующие документы:

  1. ["Red car", "Ford Fusion 2018", "Leather Seats"]
  2. ["Red car"]
  3. ["Big red car"]

В настоящее время, когда я ищу «красный автомобиль», документ 2 будет иметь значительно более высокий балл, чем документ 1, потому что документ 1 имеет многонесвязанных слов и ElasticSearch предполагает, что поле находится в том же теле текста.

Есть ли способ, которым я могу достичь этого, используя script_score или сценарий сходства?Используя пробел в позиции, я мог бы как-то разделить массив во время вычисления оценки, но не похоже, чтобы безболезненный API имел доступ к позициям слов во время оценки.

Другие соображения:

  • Я попытался изменить параметры BM25, чтобы игнорировать длину поля, но тогда проблема в том, что документ 3 также будет иметь ту же оценку, что и документы 1 и 2. В идеале, я хотел бы, чтобы Документ 2 и Документ 1с тем же баллом, чем Документ 3 с наименьшим баллом.Таким образом, длина поля используется при расчете оценки для отдельного элемента массива, а не для всего поля.

  • Вложенные документы также не являются отличным вариантом, потому что это делает ненужными другие части моего приложения.сложный.

  • Пользовательские плагины.Я использую AWS ElasticSearch, который не поддерживает пользовательские плагины, поэтому написание собственного плагина схожести не будет работать.

Есть ли другие альтернативы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...