Не удается выполнить агрегацию в Elasticsearch

Я новичок в Elasticsearch и использую его клиент отдыха высокого уровня для выполнения агрегации для диапазона дат. Когда я запускаю код, запрос выполняется успешно, но возвращаемый объект имеет значение null в качестве значения агрегации:

Вот как я пытаюсь:

AggregationBuilder aggregation =
    AggregationBuilders
        .dateRange("agg")
        .field("date_created")
        .format("MM")
        .addRange(11, 12) // from 11 to 12 (excluded)

SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
        .query(QueryBuilders.matchAllQuery())
        .aggregation(aggregation);

SearchResponse searchResponse = this.client.search(searchRequest);

Объект searchResponse имеет агрегирование как нулевое значение.

Но когда я запускаю запрос агрегации в Kibana, вот что я получаю

POST /index_name/1234/_search?size=0
{
    "aggs": {
        "range": {
            "date_range": {
                "field": "date_created",
                "format": "MM",
                "ranges": [
                    { "from": "now-0M/M" } 
                ]
            }
        }
    }
}

Выход:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "range": {
      "buckets": [
        {
          "key": "11-*",
          "from": 1509494400000,
          "from_as_string": "11",
          "doc_count": 2
        }
      ]
    }
  }
}

Может кто-нибудь, пожалуйста, помогите мне в этом? Я как бы застрял на очень долгое время.

Добавление образца данных по запросу:

"hits": [
      {
        "_index": "index_name",
        "_type": "1234",
        "_id": "AV__ZmN6KNpjod2Y_7PE",
        "_score": 1,
        "_source": {
          "category": 1234,
          "i_id": 87665,
          "v_Id": 12,
          "date_created": "2017-11-27T14:33:38.954Z"
        }
      },
      {
        "_index": "index_name",
        "_type": "1234",
        "_id": "AV_-XzlpzSX1UeitwVjd",
        "_score": 1,
        "_source": {
          "category": 1234,
          "i_id": 8766,
          "v_Id": 2,
          "date_created": "2017-11-27T09:46:00.095Z"
        }
      }
    ]

Спасибо!


person Madhav Pandey    schedule 27.11.2017    source источник
comment
Можете ли вы предоставить образец данных для вышеуказанного запроса   -  person swapnil2993    schedule 28.11.2017
comment
Вы не используете одно и то же поле даты в своем коде Java и в Kibana.   -  person Val    schedule 28.11.2017
comment
@Val В моем реальном коде я использую одно и то же поле в обоих случаях. Я обновил запрос для Kibana.   -  person Madhav Pandey    schedule 28.11.2017


Ответы (1)


Наконец-то я нашел ответ на свою проблему. После создания объекта агрегации мы должны вручную установить для него значение SearchRequest.

AggregationBuilder aggregation =
    AggregationBuilders
        .dateRange("agg")
        .field("date_created")
        .format("yyyy-MM")
        .addRange("2017-11", "2017-12") // from 11 to 12 (excluded)

SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.types(Long.toString(1234));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
        .aggregation(aggregation);

Добавлена ​​строка для исправления кода:

searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = this.client.search(searchRequest);
person Madhav Pandey    schedule 30.11.2017