min_score без учета документов с более высокими оценками - PullRequest
0 голосов
/ 27 мая 2020

У меня есть несколько миллионов документов, которые я запрашиваю следующим образом:

const query = {
  min_score: 1,
  query: {
    bool: {
      should: [
        {
          multi_match: {
            query: "David",
            fields: ["displayTitle^2", "synopsisList.text"],
            type: "phrase",
            slop: 2
          }
        },
        {
          nested: {
            path: "contributors",
            query: {
              multi_match: {
                query: "David",
                fields: [
                  "contributors.characterName",
                  "contributors.contributionBy.displayTitle"
                ],
                type: "phrase",
                slop: 2
              }
            },
            score_mode: "sum"
          }
        }
      ]
    }
  }
};

Этот запрос дает разумные результаты для широкого диапазона терминов. Однако у него есть проблема с «Давидом» - и, предположительно, с другими.

«Давид» довольно часто встречается в тексте. С параметром min_score этот запрос всегда возвращает 0 документов. Когда я удаляю min_score, я получаю тысячи документов, лучший из которых имеет оценку 22,749.

Кто-нибудь знает, что я делаю неправильно? Думаю, min_score работает не так, как я думаю.

Спасибо

1 Ответ

0 голосов
/ 27 мая 2020

Проблема, которую я пытался решить, заключалась в том, что когда я добавлял некоторые предложения фильтра к вышеупомянутому запросу, elasti c возвращал все документы, удовлетворяющие фильтру, даже те, которые имели нулевую оценку. Вот как работает should. Я не понимал, что могу вложить should в must, что даст желаемый эффект.

...