У меня есть несколько тысяч документов в эластичном поиске с разным временем и тремя сервисными идентификаторами. Можно ли разделить все эти документы по месяцам со счетчиком? Модель документа:
{
"dateTime" : "2011-03-13T11:34:14.869Z",
"organizationId" : "1a4b7625-dcec-4326-b7dc-96e038b31d0b",
"accountId" : "a9bfcced-ddaa-477c-8021-18364ac320ee",
"processInstanceId" : "711e73cb-1286-461f-810f-d5791f71101f",
"serviceConfigurationId" : "e8be10e8-2ba2-4365-bfb0-96052d90be7e",
"clusterId" : "542096b3-3982-4d4b-bce1-44b1f988cf7f",
"serviceId" : "asdf"
}
Я делаю SearchRequest с диапазоном (например, год) и ожидаю, что он будет выглядеть примерно так:
{
"_index": "test",
"_type": "_doc",
"_id": "Jc0H03AB-y_MhSAimo7v",
"_score": null,
"_month": {
"Jan": [
{
"serviceId": "asdf",
"counter": 4
},
{
"serviceId": "zxcv",
"counter": 9
}
],
"Feb":[
{
"serviceId": "asdf",
"counter": 12
},
{
"serviceId": "zxcv",
"counter": 11
}
], etc
}
}
Я нашел, как создать запрос диапазона с Java API.
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("dateTime").from(LocalDateTime.parse("2011-11-09T10:30")).to(LocalDateTime.parse("2022-11-09T10:30")).timeZone("Z");
sourceBuilder.query(rangeQueryBuilder);
searchRequest.source(sourceBuilder);
client().search(searchRequest, RequestOptions.DEFAULT);
Может быть, это невозможно, и я трачу время на поиски решения?