Отображения:
PUT sales
{
"mappings": {
"properties": {
"id":{
"type": "keyword"
},
"date":{
"type": "date",
"format": "MM-dd-yyyy"
}
}
}
}
Данные:
[
{
"_index" : "sales",
"_type" : "_doc",
"_id" : "I-6Y7W0B_-hMjUaqpQH4",
"_score" : 1.0,
"_source" : {
"id" : 12,
"date" : "10-12-2019"
}
},
{
"_index" : "sales",
"_type" : "_doc",
"_id" : "JO6Y7W0B_-hMjUaqtwEL",
"_score" : 1.0,
"_source" : {
"id" : 13,
"date" : "10-12-2019"
}
},
{
"_index" : "sales",
"_type" : "_doc",
"_id" : "Je6Y7W0B_-hMjUaqxgEH",
"_score" : 1.0,
"_source" : {
"id" : 13,
"date" : "10-18-2019"
}
}
]
Запрос: - получить максимальную дату для всех терминов, получить максимальную дату, где диапазон дат меньше 2019-10-12, если обаэто то же самое возвращаемое ведро
GET sales/_search
{
"size": 0,
"aggs": {
"transactionId": {
"terms": {
"field": "id",
"size": 10000
},
"aggs": {
"maxDate": {
"max": {
"field": "date"
}
},
"pending_status": {
"filter": {
"range": {
"date": {
"lte": "10-12-2019"
}
}
},
"aggs": {
"filtered_maxdate": {
"max": {
"field": "date"
}
}
}
},
"buckets_latest_status_pending": {
"bucket_selector": {
"buckets_path": {
"filtereddate": "pending_status>filtered_maxdate",
"maxDate": "maxDate"
},
"script": "params.filtereddate==params.maxDate"
}
}
}
}
}
}
Ответ:
[
{
"key" : "12",
"doc_count" : 1,
"pending_status" : {
"doc_count" : 1,
"filtered_maxdate" : {
"value" : 1.5708384E12,
"value_as_string" : "10-12-2019"
}
},
"maxDate" : {
"value" : 1.5708384E12,
"value_as_string" : "10-12-2019"
}
}
]
РЕДАКТИРОВАТЬ 1:
Вы можете использовать (top_hits) [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html] агрегирование, чтобы получить вседокументы в корзине
GET sales/_search
{
"size": 0,
"aggs": {
"transactionId": {
"terms": {
"field": "id",
"size": 10000
},
"aggs": {
"maxDate": {
"max": {
"field": "date"
}
},
"pending_status": {
"filter": {
"range": {
"date": {
"lte": "10-12-2019"
}
}
},
"aggs": {
"filtered_maxdate": {
"max": {
"field": "date"
}
}
}
},
"buckets_latest_status_pending": {
"bucket_selector": {
"buckets_path": {
"filtereddate": "pending_status>filtered_maxdate",
"maxDate": "maxDate"
},
"script": "params.filtereddate==params.maxDate"
}
},
"top_hits":{ ---> top hits to get all documents under a bucket
"top_hits": {
"size": 10
}
}
}
}
}
}
Для разбивки на страницы можно использовать составное агрегирование / , включая разделы