Могу ли я узнать выбранные условия более похожего на этот запрос

Я пытаюсь точно настроить запрос «более похоже на этот», чтобы он работал с довольно похожими документами (формализованные объявления, большая часть текста является «шаблоном», поэтому важны только определенные абзацы).

Поэтому я хотел бы знать, учитывая выбранный документ, для моего «max_query_terms»: 20, какие термины выбраны, использование объясненного запроса показывает только, какие из них действительно найдены в извлеченных документах, но не весь набор из двадцати токенов.

Я понял, что набор терминов выбирается априори, сравнивая справочный документ с индексом, чтобы построить уникальный запрос «соответствия», но... когда я просматриваю объясненные совпадения, у меня есть более 20 токенов...

Например, если я использую ngrams, max_query_terms применяется к токенам анализируемого текста? или к терминам ДО анализа, т.е. взять 20 слов, ПОТОМ применить к этому набору мои фильтры (стоп-слова, исключения, нграммы и т. д.)?

Есть ли способ через отдых или API получить запрос на совпадение, сгенерированный алгоритмом mlt?


person Vincent Chalmel    schedule 18.07.2016    source источник


Ответы (1)


Вы должны использовать validate в сочетании с explain, чтобы понять, какие термины были выбраны эластичным.

GET /imdb/movies/_validate/query?explain=true
{
  "query": {
    "more_like_this": {
      "like": {
        "_id": "88247"
      }
    }
  }
}

Ответ:

{
   ...
   "explanations": [
      {
         "index": "imdb",
         "valid": true,
         "explanation": "filtered((((title:terminator^3.71334 plot:kyle^1.0604408 plot:cyborg^1.0863208 ... )~2)) -ConstantScore(_uid:movies#88247))->cache(_type:movies)"
      }
   ]
}

См. это обсуждение и это запрос на вытягивание для получения более подробной информации.

person llytvynenko    schedule 28.07.2016
comment
Эти ссылки были действительно полезны. Спасибо! Я обнаружил, что мне пришлось использовать параметр перезаписи вместо параметра объяснения, чтобы получить ключевые слова в объяснении. - person Qaz; 01.10.2017
comment
@Qaz прав, для некоторых запросов MLT вам нужно убедиться, что rewrite=true, и вам может потребоваться отправить запрос на все осколки также, если вы тестируете небольшой индекс. - person Simon; 18.10.2017
comment
Если делать это в Kibana, это можно сделать только в панели разработчика, а не обнаружить из-за необходимости включать параметры вне запроса. Это правильно? @Саймон - person PurpleVermont; 27.04.2018
comment
Добавьте &rewrite=true, чтобы получить интересные термины, извлеченные из "like_text". (В противном случае он просто возвращает "+like:[Here goes your text]") - person Dzmitry; 10.07.2019