Как отдать предпочтение Elasticsearch по всем полям - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать запрос Elasticsearch, который поддерживает одинаковое количество совпадений в разных полях, а не в одном и том же поле. Например:

PUT index1/awe/1
{
  "field_1":"blue red",
  "field_2":"elephant pig"
}
PUT index1/awe/2
{
  "field_1":"blue elephant",
  "field_2":"pig red"
}

Я бы хотел, чтобы запрос "синий слон" оценил документ 1 выше, чем документ 2, поскольку документ 1 соответствует словам в обоих полях, тогда как документ 2 соответствует только одному полю.

Я попытался выполнить запрос dis_max, но он оценивает документ 2 выше 1:

GET index1/awe/_search
{ 
  "query": {
    "dis_max": {
      "queries": [
      {
        "match": {
          "field_1": "blue elephant"
        }
      },
      {
        "match": {
          "field_2": "blue elephant"
        }
      }
      ]
    }
  }
}

Результаты:

  "hits": {
    "total": 2,
    "max_score": 0.87546873,
    "hits": [
      {
        "_index": "index1",
        "_type": "awe",
        "_id": "2",
        "_score": 0.87546873,
        "_source": {
          "field_1": "albino elephant",
          "field_2": "pig red"
        }
      },
      {
        "_index": "index1",
        "_type": "awe",
        "_id": "1",
        "_score": 0.6931472,
        "_source": {
          "field_1": "albino red",
          "field_2": "elephant pig"
        }
      }
    ]
  }

Спасибо!

...