Elasticsearch, сумма размеров массивов в документах - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в Elasticsearch и использую Java High Level Rest Client. У меня есть документы с массивами внутри, и я хочу получить сумму размеров массивов определенного поля из всех документов в моем индексе, но я не могу понять, как это сделать. Пример моих документов: {name: 'abc', фамилия: 'def', books: [{firstBook}, {secondBook}, {thirdBook}]} Мне нужна сумма размера поля "books" из всех моих документов.

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете использовать scripted_metric агрегирование для этого

Запрос:

GET index31/_search
{
  "size": 0, 
  "aggs": {
    "doc_length": {
      "scripted_metric": {
        "init_script": {
          "source": "state.commits = []"
        },
        "map_script": {
          "source": "state.commits.add(doc['books'].length)"
        },
        "combine_script": {
          "source": "def sum = 0.0; for (c in state.commits) { sum += c } return sum"
        },
        "reduce_script": {
          "source": "def sum = 0.0; for (a in states) { sum += a } return sum"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...