0
我有这个映射模型在我elasticsearch指数:Elasticsearch结果下令并分组BY
{
"my_index": {
"mappings": {
"vehicules": {
"properties": {
"name": {
"type": "text"
},
"category_id": {
"type": "integer"
},
"price": {
"type": "float"
},
}
}
}
}
}
在这个指标,我已经插入一些演示数据:
+--------------+-------------+-------+
| Name | Category ID | Price |
+--------------+-------------+-------+
| Car 1 | 1 | 1500 |
| Car 2 | 1 | 4000 |
| Car 3 | 1 | 2500 |
| Motorcycle 1 | 2 | 3000 |
| Motorcycle 2 | 2 | 1400 |
| Motorcycle 3 | 2 | 2700 |
| Truck 1 | 3 | 19000 |
| Truck 2 | 3 | 15000 |
+--------------+-------------+-------+
我想根据价格值ASC对所有产品进行排序,并按类别对结果进行分组。类别本身必须用她的孩子数据的价格值进行排序。这给:
{
"2": [ <= Category where the price start with lower price (1400)
{
"name": "Motorcycle 2",
"price": 1400
},
{
"name": "Motorcycle 3",
"price": 2700
},
{
"name": "Motorcycle 1",
"price": 3000
}
],
"1": [
{
"name": "Car 1",
"price": 1500
},
{
"name": "Car 3",
"price": 2500
},
{
"name": "Car 2",
"price": 4000
}
],
"3": [
{
"name": "Truck 2",
"price": 15000
},
{
"name": "Truck 1",
"price": 19000
}
]
}
是否有可能有类似的结果或与ES接近?我是ES的初学者,我在Kibana的DevTool中尝试了许多不同的查询,但都没有成功。
我想我找到了具有所需结果的查询。我不确定它是完全优化的,但它的工作原理。
GET my_index/my_type/_search
{
"size": 0,
"aggs": {
"grouped_by_cat": {
"terms": {
"field": "category_id",
"order": {
"min_price_aggs": "asc"
}
},
"aggs": {
"min_price_aggs": {
"min": {
"field": "price"
}
},
"list_top_hits": {
"top_hits": {
"_source": {
"includes": [
"name",
"price"
]
},
"sort": [
{
"price": {
"order": "asc"
}
}
],
"size": 10000
}
}
}
}
}
}
此查询看起来是否正确?
哪个ElasticSearch的版本,您使用下面的查询上述结果? –
我使用ES v5.2。我会更新可能回答一个查询,返回我想要的结果。 – Gaius