弹性聚集一结果

时间:2019-03-22 14:29:36

标签: elasticsearch

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

当我在弹性指数中包含以下信息时:

名称|价格|输入

  • 熊| 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
    }

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

1 个答案:

答案 0 :(得分:2)

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

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