Предположим следующую stockInWarehouse
схему:Выберите TOP + GROUP BY + SHORT в Elasticsearch?
{
product_db: {
mappings: {
stockInWarehouse: {
properties: {
sku: {
type: "string"
},
arrivalTime: {
type: "date",
format: "dateOptionalTime"
}
}
}
}
}
}
Данные в stockInWarehouse
выглядят как:
{
"hits": {
"total": 5,
"hits": [
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "1",
"_source": {
"sku": "item 1",
"arrivalTime": "2015-11-11T19:00:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "2",
"_source": {
"sku": "item 2",
"arrivalTime": "2015-11-12T19:00:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "3",
"_source": {
"sku": "item 1",
"arrivalTime": "2015-11-12T19:35:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "4",
"_source": {
"sku": "item 1",
"arrivalTime": "2015-11-13T19:56:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "5",
"_source": {
"sku": "item 3",
"arrivalTime": "2015-11-15T19:56:10.231Z"
}
}
]
}
}
Что я пытаюсь сделать, это выборки TOP документов по ArrivalTime (он же самые последние документы) однако я хочу, чтобы они были , отсортированные по другим полям (sku) и ограничение на доступное sku. Ожидаемый результат будет выглядеть следующим образом:
{
"hits": {
"total": 3,
"hits": [
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "5",
"_source": {
"sku": "item 3",
"arrivalTime": "2015-11-15T19:56:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "4",
"_source": {
"sku": "item 1",
"arrivalTime": "2015-11-13T19:56:10.231Z"
}
},
{
"_index": "product_db",
"_type": "stockInWarehouse",
"_id": "2",
"_source": {
"sku": "item 2",
"arrivalTime": "2015-11-12T19:00:10.231Z"
}
}
]
}
}
Если я сортировать по arrivalTime
, в результате список будет ы содержит item 3, item 1, item 1, item 2, item 1
(дубликат). Если я отсортируюсь по sku
, то список результатов не отражает правильное время прибытия.
Возможно ли использовать этот тип запроса в Elasticsearch? Как я могу архивировать это?
Моя догадка заключается в том, что вы можете приблизиться, используя Агрегацию ковша для группировки по sku и стандартную сортировку по заказу по времени прибытия. Вы пробовали это? – Phil