вычтите два поля из индекса эластичного поиска

#elasticsearch

#elasticsearch

Вопрос:

Я пытаюсь провести некоторый анализ полей, проиндексированных в эластичном поиске.

2 поля — это ‘start_time’ и ‘end_time’. Я бы в принципе хотел сгруппировать разницу этих двух полей, т.Е. (‘end_time’ — ‘start_time’) для моего анализа. Но я не могу найти прямой ответ на этот вопрос.

Прошу вас помочь в этом.

** Редактировать **

Основываясь на приведенном ниже ответе PPearcy, я изучил агрегирование терминов и применил его к индексу. Однако я еще не применял script в запросе, поскольку я все еще изучаю агрегацию терминов. Но здесь я сталкиваюсь с другой проблемой:-

Мой индекс содержит 3 513 903 документа размером 2,1 ГБ. Вот мой запрос:-

 $ curl -X GET http://localhost:9200/rum_beacon/rum/_search -d '{"aggs":{"resp":{"terms":{"field":"response_start"}}}}' 2>/dev/null| python -c "import sys, json, pprint; j=json.load(sys.stdin); buckets=j['aggregations']['resp']['buckets'];m=map(lambda x: x,buckets); pprint.pprint( m)"

[{u'doc_count': 124219, u'key': 0, u'key_as_string': u'0'},
 {u'doc_count': 73779, u'key': 1, u'key_as_string': u'1'},
 {u'doc_count': 27135, u'key': 2, u'key_as_string': u'2'},
 {u'doc_count': 10569, u'key': 3, u'key_as_string': u'3'},
 {u'doc_count': 6065, u'key': 4, u'key_as_string': u'4'},
 {u'doc_count': 4498, u'key': 157, u'key_as_string': u'157'},
 {u'doc_count': 4473, u'key': 144, u'key_as_string': u'144'},
 {u'doc_count': 4461, u'key': 162, u'key_as_string': u'162'},
 {u'doc_count': 4443, u'key': 164, u'key_as_string': u'164'},
 {u'doc_count': 4434, u'key': 155, u'key_as_string': u'155'}]
  

** Проблема:**

Я не могу получить результаты для всех полей response_start. Я получаю только 10 значений в json ответа.

** Что я пробовал**

Я попытался указать size поле в запросе json, но в ответе по-прежнему получаю только 10 значений:-

 $ curl -X GET http://localhost:9200/rum_beacon/rum/_search -d '{"size":50,"aggs":{"resp":{"terms":{"field":"response_start"}}}}' 2>/dev/null| python -c "import sys, json, pprint; j=json.load(sys.stdin); buckets=j['aggregations']['resp']['buckets'];m=map(lambda x: x,buckets); pprint.pprint( m)"


[{u'doc_count': 124219, u'key': 0, u'key_as_string': u'0'},
 {u'doc_count': 73779, u'key': 1, u'key_as_string': u'1'},
 {u'doc_count': 27135, u'key': 2, u'key_as_string': u'2'},
 {u'doc_count': 10569, u'key': 3, u'key_as_string': u'3'},
 {u'doc_count': 6065, u'key': 4, u'key_as_string': u'4'},
 {u'doc_count': 4498, u'key': 157, u'key_as_string': u'157'},
 {u'doc_count': 4473, u'key': 144, u'key_as_string': u'144'},
 {u'doc_count': 4461, u'key': 162, u'key_as_string': u'162'},
 {u'doc_count': 4443, u'key': 164, u'key_as_string': u'164'},
 {u'doc_count': 4434, u'key': 155, u'key_as_string': u'155'}]
  

Комментарии:

1. Некоторые образцы документов, сопоставления и желаемый результат помогли бы людям найти подходящее решение.

2. Думаю, атрибут size должен располагаться ниже по иерархии, например: {«aggs»:{«resp»:{«terms»:{«field»: «response_start», «size»: 50}}}}

Ответ №1:

Взгляните на агрегированные данные по полям скрипта: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations.html

В вашем случае вы бы выполняли агрегирование терминов в поле скрипта, как указано здесь: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

Комментарии:

1. Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.

2. Основные части были бы хороши, потому что теперь ссылки не работают