如何汇总和分页结果

时间:2019-08-08 08:07:45

标签: elasticsearch elasticsearch-aggregation

我知道无法进行页面聚合,建议的方法是使用复合。 我的问题是,使用复合键时,键是聚合键,我需要按“数字”分页,例如第1,2页,依此类推。

以下是我们尝试过的模型和查询,感谢您的帮助。

模型

{
    "_index": "car-catalog",
    "_type": "catalogvehicle",
    "_id": "9afc0cb6d1899df2fbdb0d004bd64be5529d0874",
    "_score": 1.0,
    "_source": {
        "vehicleSpecification": {
            "body": {
                "size": null,
                "type": "Cabriolet 2 portes",
                "doors": "2",
                "seats": 2
            }
        },
        "id": "9afc0cb6d1899df2fbdb0d004bd64be5529d0874",
        "make": "ABARTH",
        "model": "124 Spider",
        "shortModel": "124",
        "trimline": "1.4 Turbo 170ch Bvm Gt",
        "isConfigurable": true
    }
}

我需要按Make,Model和BodyType分组,以便每次聚合得到一个文档并分页结果。 例如:第1页应该包含10组,每组包含一个代表车辆的文档,第2页则是接下来的10辆车辆,依此类推。 我不能使用AfterKey,因为我需要保持这些键的状态,而且这不是一个可行的解决方案(至少目前如此)

尝试1-汇总-最近达到预期结果

GET car-catalog-fr-fr-1.0.0/_search/
{
   "aggs":{
      "make":{
         "aggs":{
            "model":{
               "aggs":{
                  "body":{
                     "terms":{
                        "field":"vehicleSpecification.body.type.idx",
                        "order":[
                           {
                              "_key":"asc"
                           }
                        ],
                        "size":10000
                     },
                     "aggs":{
                        "top_sales_hits":{
                           "top_hits":{
                              "size":1
                           }
                        }
                     }
                  }
               },
               "terms":{
                  "field":"shortModel.idx",
                  "order":[
                     {
                        "_key":"asc"
                     }
                  ],
                  "size":10000
               }
            }
         },
         "terms":{
            "field":"make.idx",
            "order":[
               {
                  "_key":"asc"
               }
            ],
            "size":10000
         }
      }
   },
   "size":0
}

尝试2-复合-每个存储桶中缺少文档,因此不需要分页。

GET car-catalog-fr-fr-1.0.0/_search
    {
       "aggs":{
          "my_buckets" : {
            "composite": {
              "sources": [
                { "make": { "terms": { "field": "make.idx", "order": "asc" } } },
                { "model": { "terms": { "field": "model.idx", "order": "asc" } } },
                { "body": { "terms": { "field": "vehicleSpecification.body.type.idx" } } }
              ]
            }
          }
       }
    }

0 个答案:

没有答案