如何解决如何按次要字段对Elasticsearch结果进行分组,同时按另一个字段对内部文档进行排序
我的目标是为索引中的所有文档筛选出与特定字段匹配的文档,然后从那些结果中,仅选择具有辅助字段的多个值之一的文档。然后,在每个组中对每个文档进行排序(例如,按时间排序)。
在下面的示例中,我只想获取其“名称”字段等于“ bob”的文档。然后,在其余文档中,仅使“日期”字段等于“星期一”或“星期二”的那些文件。然后,我想按日期将这些文档分组,而不是返回一个平面结果数组,而是将其按日期嵌套,并在每个日期组内,按时间戳进一步对文档进行排序。
示例数据:
{
"doc0": {
"name": "bob","date": "monday","time": "5PM"
},"doc1": {
"name": "bob","time": "10AM"
},"doc2": {
"name": "bob","date": "tuesday","time": "3PM"
},"doc3": {
"name": "bob","date": "wednesday","time": "4PM"
},"doc4": {
"name": "joe","time": "7PM"
}
}
由于doc4
的名称为=='joe',而doc3
的日期为!=(“星期一” ||“星期二”),因此应将它们排除在外。
预期结果:
{
"monday": [
{
"id": "doc1","time": "5PM"
},{
"id": "doc0","time": "10AM"
}
],"tuesday": [
{
"id": "doc2","time": "3PM"
}
]
}
我已经看到使用聚合来解决类似的问题,但是我的尝试均无济于事-以下是失败的查询。
{
"sort": [
{
"@timestamp": {
"order": "desc","unmapped_type": "boolean"
}
}
],"query": {
"bool": {
"filter": [
{
"match_phrase": {
"name": "bob"
}
}
]
}
},"aggs": {
"podagg": {
"terms": {
"field": "date"
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。