Подстановочный знак Elasticsearch query_string не учитывает длину - PullRequest
0 голосов
/ 18 января 2019

У меня есть несколько записей на Elasticsearch, которые имеют одинаковые первые буквы, такие как: word, worda, wordab, wordabc, wordabcd.

Я использую query_string с подстановочным знаком:

"query": {
  "bool":{
    "must":[
      {
        "query_string":{
          "query":"word*"
        }
      }
    ]
  }
}

Все хиты имеют одинаковый счет ("_score": 1.0), поэтому порядок произвольный.Можно ли получить оценку, учитывая, насколько слово на самом деле соответствует термину?Например, слово соответствует термину 100%, слово соответствует слову 80% и т. Д.

1 Ответ

0 голосов
/ 18 января 2019

Причина, по которой вы получаете оценку 1 для всех совпавших документов, заключается в следующем: запрос с подстановочными знаками / префиксами является запросами с несколькими терминами, и для их выполнения Elasticsearch необходимо переписать (чтобы получить действительные совпадающие термины)

Есть несколько способов добиться этого, по умолчанию один из них называется constant_score, который присваивает все постоянные результаты (баллы)

Существует несколько различных способов переписать - некоторые из них будут давать неравные оценки, но этот результат скорее будет зависеть от TF-IDF распределения терминов (например, как часто worda происходит в соответствующем документе, и сколько документов во всем индексе содержит worda ). В качестве первого стартового способа вы можете попробовать top_terms_1000, настроив позже.

К сожалению, не существует идеального способа достижения ожидаемого поведения.

Один из возможных способов имитировать это попытка адаптировать Edge NGram tokenizer для получения токенов из слова abc следующим образом:

w, wo, wor, word, ...

В этом случае запрос может дать более значимый результат. Для идеального ожидаемого результата - процент совпадения - вам нужно создать собственный механизм запроса и оценки

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