如何在OpenSearch多索引查询中按日期型索引名称降序排序?
问题描述
我拥有命名格式为request_response-yyyy-mm-dd的每日索引,执行以下查询:
curl -X GET "localhost:9200/request_response-*/_search?stored_fields=value&pretty" -H 'Content-Type: application/json' -d' { "query": { "term": { "_id": { "value": "092d882489ea6dc4a6d2dc16d97fb72192b17ca97eaaca59961e97597b6ba80c" } } } } '
返回结果中旧索引的文档排在前面(如request_response-2024-05-09先于request_response-2024-05-10),我希望最新索引的文档优先返回,能否在OpenSearch服务端实现该排序,而非在客户端处理?
解决方案
可以直接在查询中添加sort参数,基于_index元字段进行降序排序。由于你的索引名称是标准的request_response-yyyy-mm-dd格式,日期部分为ISO格式字符串,字典序降序正好对应日期从新到旧的顺序。
修改后的查询如下:
curl -X GET "localhost:9200/request_response-*/_search?stored_fields=value&pretty" -H 'Content-Type: application/json' -d' { "query": { "term": { "_id": { "value": "092d882489ea6dc4a6d2dc16d97fb72192b17ca97eaaca59961e97597b6ba80c" } } }, "sort": [ { "_index": { "order": "desc" } } ] } '
说明
- OpenSearch支持对内置的
_index元字段直接排序,该字段存储了文档所属的索引名称 - 设置
order: "desc"后,索引名称字典序更大的(即日期更新的)文档会排在结果最前面 - 整个排序逻辑由服务端处理,无需客户端进行二次排序
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

