使用聚合时,Elastic Search不考虑大小

时间:2019-12-11 04:27:05

标签: elasticsearch

我是Elastic Search的新手,如果答案很明显,请原谅我。

我修改了一个查询,以使用aggs显示“不同”的结果。但是,在添加aggs之后,size似乎不再起作用-无论我将大小设置为多少,它总是返回10个结果。

有人会知道我如何同时使用aggs和size吗?

我的查询是:

{
    "size": "15",
    "from": "0",
    "query": {
      "bool": {
        "filter": [
          {
            "term": {
              "category": "Cars"
            }
          },
          {
            "term": {
              "location": "Sydney"
            }
          },
          {
            "term": {
              "status": true
            }
          }
        ]
      }
    },
   "sort": [
      {
        "_score": "desc"
      },
      {
        "brand": "asc"
      }
    ],
    "aggs": {
        "brand": {
            "terms": {
                "field": "brand",
                "order": {
                    "price": "asc"
                }
            },
            "aggs": {
                "brand": {
                    "top_hits": {
                        "size": 1,
                        "sort": [
                            {
                                "price": {
                                    "order": "asc"
                                }
                            }
                        ]
                    }
                },
                "price": {
                    "min": {
                        "field": "price"
                    }
                }
            }
        }
    }
  }

1 个答案:

答案 0 :(得分:1)

在查询之前提到的size参数,用于设置查询命中的大小,并且不会影响聚合存储桶的大小。 就像您在子聚合中提到的那样,在父聚合中使用size参数为“ size”:1 修改后的查询以获得前10个aggs:

{
    "size": "15",
    "from": "0",
    "query": {
      "bool": {
        "filter": [
          {
            "term": {
              "category": "Cars"
            }
          },
          {
            "term": {
              "location": "Sydney"
            }
          },
          {
            "term": {
              "status": true
            }
          }
        ]
      }
    },
   "sort": [
      {
        "_score": "desc"
      },
      {
        "brand": "asc"
      }
    ],
    "aggs": {
        "brand": {
            "terms": {
                "field": "brand",
                "size": 10, 
                "order": {
                    "price": "asc"
                }
            },
            "aggs": {
                "brand": {
                    "top_hits": {
                        "size": 1,
                        "sort": [
                            {
                                "price": {
                                    "order": "asc"
                                }
                            }
                        ]
                    }
                },
                "price": {
                    "min": {
                        "field": "price"
                    }
                }
            }
        }
    }
  }

希望这会有所帮助。