Максимальное поле Elasticsearch в сочетании с уникальным полем

У меня есть индекс с двумя полями:

  • имя: uuid
  • версия: длинная

Теперь я хочу только подсчитать документы (в очень большом индексе [1 миллион+ записей]), где версия имени является самой высокой. Например, запрос по индексу со следующими документами:

{name="a", version=1} 
{name="a", version=2}
{name="a", version=3}
{name="b", version=1}

... вернет:

count=2

Это как-то возможно? Я не могу найти решение для этой конкретной проблемы.


person Julian Pieles    schedule 02.12.2019    source источник


Ответы (1)


Вы фактически описываете количество различных имен, что можно сделать с помощью агрегация кардинальности.

Запрос:

GET test1/_search
{
    "aggs" : {
        "distinct_count" : {
            "cardinality" : {
                "field" : "name.keyword"
            }
        }
    },
    "size": 0
}

Ответ:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 4,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "distinct_count" : {
      "value" : 2
    }
  }
}
person Adam T    schedule 02.12.2019
comment
Спасибо за ваш ответ, но это не дает подсчет самой высокой версии для имени. - person Julian Pieles; 03.12.2019
comment
Да, это так. значение: 2 в нижней части объекта. - person Adam T; 03.12.2019
comment
Ах, я понимаю, что вы имеете в виду! На самом деле не имеет значения, какая самая высокая версия. Мой вопрос не корректен. Я отмечу это как правильный ответ и открою новый. Спасибо за помощь! - person Julian Pieles; 03.12.2019