Совокупный подсчет/сумма в elasticsearch

Я пытаюсь понять, как суммировать множество разных показателей в индексе elasticsearch. Документ в индексе выглядит так:

{
  '_source': {
    'my_field': 'Robert and Alex went with Robert to play in London and then Robert went to London',
    'ner': {
      'persons': {
        'Alex': 1,
        'Robert': 3
      },
      'organizations': {},
      'dates': {},
      'locations': {
        'London': 2
      }
    }
  }
}

Как я могу суммировать все разные слова в location, dates и persons в индексе? Например, если в другом документе было 2 вхождения Alex, я бы получил Alex: 3, Robert: 3, ..


person ninesalt    schedule 20.01.2019    source источник
comment
Вам нужно количество вхождений или сумма? Оба разные, и оба имеют разные пути   -  person Ashish Tiwari    schedule 21.01.2019
comment
@ashishtiwari Пытаюсь получить сумму   -  person ninesalt    schedule 21.01.2019
comment
я предполагаю, что агрегация суммы вам подойдет elastic.co/guide/en/elasticsearch/reference/current/   -  person Ashish Tiwari    schedule 21.01.2019
comment
@ashishtiwari как это будет работать, если я не могу явно записать название поля (Алекс, Роберт, Лондон и т. д.)?   -  person ninesalt    schedule 21.01.2019


Ответы (1)


Это даст вам сумму определенного поля

curl -X POST "localhost:9200/yourindex/_search?size=0" -H 'Content-Type: application/json' -d'
{
    "aggs" : {
        "person_Alex" : { "sum" : { "field" : "person.Alex" } },
        "person_Robert" : { "sum" : { "field" : "person.Robert" } },
        "person_Alex" : { "sum" : { "field" : "person.Alex" } }
    }
}
'

Это даст вам счет

curl -X GET "localhost:9200/yourindex/_search" -H 'Content-Type: application/json' -d'
{
    "aggs" : {
        "count_Alex" : {
            "terms" : { "field" : "person.Alex" }
        },
        "count_Robert" : {
            "terms" : { "field" : "person.Alex" }
       }
    }
}'

Вам нужно указать поля.

person Ashish Tiwari    schedule 21.01.2019
comment
Я не думаю, что вы понимаете мой вопрос. Я не буду знать имена полей, потому что они извлекаются автоматически, и каждый документ будет иметь разные поля. Я хочу суммировать поля, которые у них есть. - person ninesalt; 21.01.2019