Сортировать сегменты агрегации по значениям общих полей - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы сгруппировать документы на основе группового поля G. Я использую стратегию «агрегации полей», описанную в документации Elastic, чтобы отсортировать сегменты по максимальному количеству баллов содержащихся в них документов (так называемый пример свертывания полей в Elasticdoc), например так:

{
  "query": {
    "match": {
      "body": "elections"
    }
  },
  "aggs": {
    "top_sites": {
      "terms": {
        "field": "domain",
        "order": {
          "top_hit": "desc"
        }
      },
      "aggs": {
        "top_tags_hits": {
          "top_hits": {}
        },
        "top_hit" : {
          "max": {
            "script": {
              "source": "_score"
            }
          }
        }
      }
    }
  }
}

Этот запрос также включает в себя наибольшее количество попаданий в каждом сегменте.Если максимальная оценка не является уникальной для сегментов, я хотел бы указать столбец второго порядка.Из контекста приложения я знаю, что внутри корзины все документы имеют одинаковое значение для поля F. Поэтому это поле следует использовать в качестве столбца второго порядка.

Как я могу реализовать это в Elastic?Есть ли способ сделать поле из субагрегации с наибольшим количеством попаданий пригодным для использования во вложенной агрегации?

Есть идеи?Большое спасибо!

1 Ответ

0 голосов
/ 13 сентября 2018

Кажется, ты можешь. На этой странице перечислены все стратегии сортировки для агрегирования терминов.

И это пример многокритериальной сортировки сегментов:

Для заказа контейнеров можно использовать несколько критериев, предоставляя массив критериев заказа, таких как:

GET /_search
{
    "aggs" : {
        "countries" : {
            "terms" : {
                "field" : "artist.country",
                "order" : [ { "rock>playback_stats.avg" : "desc" }, { "_count" : "desc" } ]
            },
            "aggs" : {
                "rock" : {
                    "filter" : { "term" : { "genre" : "rock" }},
                    "aggs" : {
                        "playback_stats" : { "stats" : { "field" : "play_count" }}
                    }
                }
            }
        }
    }
}
...