【问题标题】:elastic Aggregation one result弹性聚合一个结果
【发布时间】:2019-03-22 14:29:36
【问题描述】:

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

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

姓名 |价格 |输入

  • 熊| 15 |动物
  • 巴尔 | 4 |玩具
  • 鸭子 | 10 |动物
  • 熊| 13 |动物
  • 娃娃 | 16 |玩具
  • 狗 | 20 |动物

我想要以下结果

姓名 |价格 |输入

  • 鸭子 | 10 |动物
  • 巴尔 | 4 |玩具

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

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

                }
            }
        },
        "size": 10
    }

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您想这样做,即对于每种产品类型,找到价格最低的命中:

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

    【讨论】:

    • 这似乎正是我想要的结果。即使我还添加了一个查询,聚合结果也会使用它。
    • 是的,如果你添加一个查询,聚合只会在匹配的文档上进行。
    猜你喜欢
    • 2017-09-13
    • 2018-08-23
    • 1970-01-01
    • 2017-03-10
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    相关资源
    最近更新 更多