我有一个Elasticsearch查询,其中有一个条件检查issoldout = false。在此基础上,我没有几个“求和和计数”聚合字段。

但是,如果issoldout = false未获取任何结果,我想获取聚合值,然后尝试使用issoldout = true。有什么方法可以不用issoldout = true进行第二次搜索就可以完成此工作。

最佳答案

您可以按照说明使用_msearch逐字提交两个查询,但是也可以在同一请求中并行运行它们:

您可以使用filter聚合来执行此操作,以使其与它们一起下降。同样,您可以只使用terms聚合来完成此操作,但是当它也是false时也可以获取它。

{
  "query": {
    ... normal query ...
  },
  "aggs": {
    "group_by_soldout": {
      "filter": {
        "term": {
          "issoldout": true
        }
      },
      "aggs": {
        "stats_for_field": {
          "stats": {
            "field": "your_field"
          }
        }
      }
    }
  }
}

10-08 13:38