#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. Основные части были бы хороши, потому что теперь ссылки не работают