如何按次要字段对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 (将#修改为@)