Elasticsearch minBy

Есть ли способ в asticsearch получить поле из документа, содержащего максимальное значение? (В основном работает аналогично maxBy из scala)

Например (издевались):

{
    "aggregations": {
        "grouped": {
            "terms": {
                "field": "grouping",
                "order": {
                    "docWithMin": "asc"
                }
            },
            "aggregations": {
                "withMax": {
                    "max": {
                        "maxByField": "a",
                        "field": "b"
                    }
                }
            }
        }
    }
}

Для которого {"grouping":1,"a":2,"b":5},{"grouping":1,"a":1,"b":10}вернется (что-то вроде): {"grouped":1,"withMax":5}где максимум происходит от первого объекта из-за "a" быть там выше.

1 ответ

Предполагая, что вы просто хотите вернуть документ с максимальным значением a, вы можете сделать это:

{
  "size": 0,
  "aggs": {
    "grouped": {
      "terms": {
        "field": "grouping"
      },
      "aggs": {
          "maxByA": {
            "top_hits": {
            "sort": [
             {"a": {"order": "desc"}}
            ],
            "size": 1
          }
        }
      }
    }
  }
}
Другие вопросы по тегам