es 父子查询 排序
时间: 2023-12-31 14:05:01 浏览: 81
elasticSearch查询语句DSL
在 Elasticsearch 中,父子查询可以通过 `has_child` 或 `has_parent` 查询实现。而查询结果的排序可以通过在查询语句中添加 `sort` 参数实现。
例如,假设我们有一个包含订单和订单详情的父子数据结构,我们想按照订单详情中的价格从低到高排序,可以使用以下查询:
```
GET /orders/_search
{
"query": {
"has_child": {
"type": "order_detail",
"score_mode": "none",
"query": {
"match_all": {}
}
}
},
"sort": [
{
"order_detail.price": {
"order": "asc"
}
}
]
}
```
这个查询中,我们使用了 `has_child` 查询来匹配所有的订单详情,然后使用 `sort` 参数对 `order_detail.price` 进行升序排序。注意,我们需要设置 `score_mode` 为 `"none"`,否则 Elasticsearch 会默认将子文档的评分计入整个查询的评分,从而影响排序结果。
类似地,如果我们想按照订单的创建时间从新到旧排序,可以使用以下查询:
```
GET /orders/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"created_at": {
"order": "desc"
}
}
]
}
```
这个查询中,我们直接使用了 `match_all` 查询来匹配所有的订单,然后使用 `sort` 参数对 `created_at` 进行降序排序。由于我们没有使用父子查询,所以不需要设置 `score_mode`。
阅读全文