弹性聚集一结果

最后发布: 2019-03-22 14:29:36


问题

我想按属性分组,只得到结果中返回的最便宜的。

当我在弹性索引中包含以下信息时:

姓名| 价格| 类型

  • 15 | 动物
  • bal | 4 | 玩具
  • 鸭| 10 | 动物
  • 13 | 动物
  • 娃娃| 16 | 玩具
  • 狗| 20 | 动物

我想要以下结果

姓名| 价格| 类型

  • 鸭| 10 | 动物
  • bal | 4 | 玩具

我尝试通过以下查询获得这样的结果:

    {
        "aggregations": {
            "aggregation_1": {
                "terms": {
                    "field": "type.keyword",
                    "order": {
                        "price_min": "desc"
                    },
                        "size": 5
                },
                "aggregations": {
                    "price_min": {
                        "min": {
                            "field": "price"
                        }
                    }

                }
            }
        },
        "size": 10
    }

但是该查询的结果返回所有项目,聚合是获取我想要的错误方法吗?

elasticsearch
回答

您想要这样做,即对于每种产品类型,以最低的价格找到匹配:

{
  "size": 0,
  "aggregations": {
    "aggregation_1": {
      "terms": {
        "field": "type.keyword",
        "size": 5
      },
      "aggregations": {
        "cheapest": {
          "top_hits": {
            "size": 1,
            "sort": {
              "price": "asc"
            }
          }
        }
      }
    }
  }
}