elasticsearch - 使用时间过滤搜索结果
问题描述
考虑代表事件不同阶段的索引“订单/订单”中的弹性搜索文档
{"order_id": 10001, "order_status": "New", "time": 20180524101505}
{"order_id": 10002, "order_status": "New", "time": 20180524101505}
{"order_id": 10001, "order_status": "Paid", "time": 20180524102505}
{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "shipped", "time": 20180525082505}
{"order_id": 10003, "order_status": "New", "time": 20180525101505}
{"order_id": 10001, "order_status": "Delivered", "time": 20180526082505}
{"order_id": 10001, "order_status": "Closed", "time": 20180526082605}
我怎样才能执行搜索,结果将是该事件的最新阶段。基本上我需要做的是根据“时间”进行排序并得到单独的结果
{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "Closed", "time": 20180526082605}
{"order_id": 10003, "order_status": "New", "time": 20180525101505}
解决方案
max
我建议不要使用聚合,而是使用聚合,top_hits
因为您需要检索每个订单的最新文档:
{
"aggs": {
"byOrderId": {
"terms": {
"field": "order_id"
},
"aggs": {
"latest": {
"top_hits": {
"sort": {"time": "desc"},
"size": 1
}
}
}
}
}
}
推荐阅读
- bash - 如何“挤压”目录级别
- security - 有人可以通过设置 x-hasura-role 来伪造对 Hasura GraphQL Engine 的请求吗?
- java - 赋值的左边一定是变量?
- c++ - 在 Visual Studio 2017 中使用 CMake 向静态库添加依赖项不起作用
- c# - 有没有办法在属性中输入变量(参数)?
- laravel - 使用 vue.js 和 laravel 哪种方法更好?
- octave - Octave GUI 命令窗口 - 我可以增加显示的行数和列数吗?
- debugging - 如何在 VS Code 中调试 Neutralino?
- excel - 单元格中特殊字符之后/之前的粗体部分文本
- react-native - 如何将现有的 React Native App 升级到新的 React Native 版本?我们有任何文件吗?