Ранжирование агрегации Elasticsearch с запросом по нескольким терминам - PullRequest
1 голос
/ 26 сентября 2019

tl; dr: хотите ранжировать агрегаты в зависимости от того, использовал ли ключ корзины один из поисковых терминов.

У меня есть два документа с индексами и рекомендации со следующими сопоставлениями:

Документы:

{
    "id": string,
    "document_text" : string,
    "author" : { "name": string }
    ...other fields
}

Рекомендации:

{
    "id": string,
    "recommendation_text" : string,
    "author" : { "name": string }
    ...other fields
}

Проблема, которую я решаю, состоит в том, чтобы найти лучших авторов для терминов запроса.

Это прекрасно работает с multimatch для одного термина запроса, такого как:

{
  "size": 0,
  "query": {
    "multi_match": {
      "query": "science",
      "fields": [
        "document_text",
        "recommendation_text"
      ],
      "type": "phrase",
    }

  },
  "aggs": {
    "search-authors": {
      "terms": {
        "field": "author.name.keyword",
        "size": 50
      },
      "aggs": {
        "top-docs": {
          "top_hits": {
            "size": 100
          }
        }
      }
    }
  }
}

Но когда у меня несколько ключевых слов, скажем, zoology, botany, я хочу, чтобы рейтинг агрегации поместил авторов, которые говорили о зоологии и ботанике, выше, чем у тех, кто использовал любое из них.

имеямножественное multi_match с bool не помогает, так как это не совсем и / или ситуация.

...