2015-03-07 2 views
0

У меня есть данные с меткой времени. Я хочу сделать date_histogram на этом.Агрегация elasticsearch с date_histogram дает неправильный результат для ковшей

Когда я запустил запрос, он возвращает итоговый результат как 13, который является правильным, но он показывает одну запись в 2014-10-10, но я не могу найти эту запись в data У меня есть.

curl http://localhost:9200/test/test/_search -X POST -d '{"fields": 
["creation_time"], 
    "query" : 
     {"filtered": 
      {"query": 
       {"match": 
        {"type": "test.type"} 
       } 
      } 
     }, 
    "aggs": 
     {"group_by_created_by": 
      {"date_histogram": 
       {"field":"creation_time", "interval": "1d"} 
      } 
     } 
}' | python -m json.tool 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2083 100 1733 100 350 234k 48590 --:--:-- --:--:-- --:--:-- 241k 
{ 
    "_shards": { 
     "failed": 0, 
     "successful": 5, 
     "total": 5 
    }, 
    "aggregations": { 
     "group_by_created_at": { 
      "buckets": [ 
       { 
        "doc_count": 12, 
        "key": 1412812800000, 
        "key_as_string": "2014-10-09T00:00:00.000Z" 
       }, 
       { 
        "doc_count": 1, 
        "key": 1412899200000, 
        "key_as_string": "2014-10-10T00:00:00.000Z" 
       } 
      ] 
     } 
    }, 
    "hits": { 
     "hits": [ 
      { 
       "_id": "qk5EGDqUSoW-ckZU9bnSsA", 
       "_index": "test", 
       "_score": 3.730029, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T16:35:39.535389" 
        ] 
       } 
      }, 
      { 
       "_id": "GnglI_3xRYii_oE5q91FUg", 
       "_index": "test", 
       "_score": 3.6149597, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T17:16:55.677919" 
        ] 
       } 
      }, 
      { 
       "_id": "ELP1f_-IS8SJiT4i4Vh6_g", 
       "_index": "test", 
       "_score": 2.974081, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T01:21:21.691270" 
        ] 
       } 
      }, 
      { 
       "_id": "ySlIV4vWRvm_q0-9p87dEQ", 
       "_index": "test", 
       "_score": 2.974081, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T01:33:51.291644" 
        ] 
       } 
      }, 
      { 
       "_id": "swXVnMmJSsmNW30zeJvCoQ", 
       "_index": "test", 
       "_score": 2.974081, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T17:08:45.738821" 
        ] 
       } 
      }, 
      { 
       "_id": "h0j6L-VGTnyChSIevtt2og", 
       "_index": "test", 
       "_score": 2.974081, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T22:35:16.908080" 
        ] 
       } 
      }, 
      { 
       "_id": "ANoTEXIgRgml6gLD4YKtIg", 
       "_index": "test", 
       "_score": 2.9459102, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T01:25:18.869175" 
        ] 
       } 
      }, 
      { 
       "_id": "FSCPBsogT5OXghBUmKXidQ", 
       "_index": "test", 
       "_score": 2.9459102, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T01:42:49.000599" 
        ] 
       } 
      }, 
      { 
       "_id": "VEw6XbIySvW7h7GF7h4ynA", 
       "_index": "test", 
       "_score": 2.9459102, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T16:45:51.563595" 
        ] 
       } 
      }, 
      { 
       "_id": "J9NfffAvRPmFxtOBZ6IsCA", 
       "_index": "test", 
       "_score": 2.9169223, 
       "_type": "test", 
       "fields": { 
        "creation_time": [ 
         "2014-10-09T01:23:30.546353" 
        ] 
       } 
      } 
     ], 
     "max_score": 3.730029, 
     "total": 13 
    }, 
    "timed_out": false, 
    "took": 4 
} 

Если вы видите примеры выше, то нет никакой записи на 10-10 но агрегация показывает одну запись в этом ведре.

ответ

1

Агрегации выполняются на всех соответствующих документах.

Вы не устанавливаете size, что означает, что вы по умолчанию 10 документов под попаданием. Измените size на 13 (+), и ваш документ 2014-10-10 должен показать.

Если у вас есть больше результатов, которые сделают его неудобным, чтобы вручную проверить все результаты, вы можете также использовать top_hits в качестве суб-агрегатора, чтобы получить максимум того, что в ведре (есть size вариант там же) ,

+0

Есть ли способ узнать, какой элемент упал, в каком ковше? – Nilesh

+0

Да, с агрегацией 'top_hits' вы получите именно это, вы сами выбираете, сколько документов нужно включать в каждое ведро, а также как их сортировать. – Clarence

1

Если вы посчитаете свои хиты, вы увидите, что всего 10 объектов. Это связано с тем, что по умолчанию Elasticsearch возвращает только десятку результатов:.

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

Попробуйте обновить запрос:

{ 
    "size": 13, 
    "fields": ["creation_time"], 
    "query" : 
     {"filtered": 
      {"query": 
       {"match": 
        {"type": "test.type"} 
       } 
      } 
     }, 
    "aggs": 
     {"group_by_created_by": 
      {"date_histogram": 
       {"field":"creation_time", "interval": "1d"} 
      } 
     } 
} 

И вы увидите документ, который был создан на 10-10.

Смежные вопросы