Поиск по лучшим полевым матчам в Elasticsearch - PullRequest
0 голосов
/ 02 мая 2018

Поиск слова «foo bar» в приведенном ниже документе приведет к совокупному результату name*, но я хотел бы получить оценку наилучшего сопоставленного поля (т. Е. name1 оценка).

{
  "name1": "foo bar",
  "name2": "foo",
  "name3": "bar"
}

Запрос, например:

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [{
            "match": {
              "name1": {
                "query": "foo bar"
              }
            }
          }, {
            "match": {
              "name2": {
                "query": "foo bar"
              }
            }
          }, {
            "match": {
              "name3": {
                "query": "foo bar"
              }
            }
          }]
        }
      }
    }
  }
}

Использование Elasticsearch 2.4

1 Ответ

0 голосов
/ 02 мая 2018

A логический запрос объединяет оценку всех подзапросов. Из документов:

В bool-запросе используется подход «больше совпадений-лучше», поэтому оценка из каждого соответствующего предложения должны или должны быть добавлены вместе предоставьте итоговую оценку по каждому документу.

Для вашего случая вы хотели бы использовать другой объединяющий запрос: Запрос dis_max

Запрос, который генерирует объединение документов, созданных его подзапросы, и который оценивает каждый документ с максимальной оценкой для этот документ, созданный любым подзапросом, плюс разрыв связи приращение для любых дополнительных соответствующих подзапросов.

Пример:

{
  "query": {
    "dis_max": {
      "queries": [
        {
          "match": {
            "name1": {
              "query": "foo bar"
            }
          }
        },
        {
          "match": {
            "name2": {
              "query": "foo bar"
            }
          }
        },
        {
          "match": {
            "name3": {
              "query": "foo bar"
            }
          }
        }
      ]
    }
  }
}

* Обратите внимание, я написал это на ES6, у которого больше нет запроса filtered, но я надеюсь, что вы поняли суть :)

Надеюсь, это поможет!

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