如何限制弹性搜索中术语聚合的响应大小

问题描述 投票:0回答:1

我使用下面的弹性搜索查询并获取响应,但如何限制查询中指定的每个 itemDetails.itemId 的响应大小。

弹性搜索版本:8.7.1

示例弹性搜索文档:

{
  "itemDetails": {
    "itemId": "3076",
    "usecase": "habc",
    "usecaseId": "xyz"
  },
  "metaData": {
    "cId": "96ff54507c2d018e5c767785c705a5b2",
    "date1": "2023-09-29T12:29:54",
    "date2": "2023-09-29T12:30:09"
  }
other properties....
}

输入查询:

POST /index/_search?typed_keys=true
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "itemDetails.itemId": [
              "3076",
              "1111",
              "2222"
            ]
          }
        },
        {
          "terms": {
            "itemDetails.usecase": [
              "habc"
            ]
          }
        },
        {
          "range": {
            "metaData.date1": {
              "lte": "2023-09-30T19:55:54.611Z",
              "gte": "2023-09-27T19:55:54.611Z"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "distinct_cIds": {
      "terms": {
        "field": "metaData.cId"
        "order": { "max_date1": "desc" }
      },
      "aggs": {
        "max_date1": { 
          "max": { "field": "metaData.date1" } 
        },
        "top_doc": {
          "top_hits": {
            "size": 1,
            "sort": [
               {"metaData.date1": "desc"},          
               {"metaData.date2": "desc"}          
            ],
            "_source": {
              "includes": [
                        "itemDetails.itemId",
                        "itemDetails.usecase",
                        "metaData.cId",
                        "metaData.date1"
              ]
            }
          }
        }
      }
    }
  }
}

预期结果:如果大小为2,响应应包含每个itemDetails.itemId 2条记录

参考问题:此查询是参考问题的延续

elasticsearch elasticsearch-aggregation elasticsearch-8
1个回答
0
投票

如果希望每个

itemId
有两个结果,则需要为
terms
字段添加另一个
itemDetails.itemId
子聚合,如下所示:

POST /index/_search?typed_keys=true
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "itemDetails.itemId": [
              "3076",
              "1111",
              "2222"
            ]
          }
        },
        {
          "terms": {
            "itemDetails.usecase": [
              "habc"
            ]
          }
        },
        {
          "range": {
            "metaData.date1": {
              "lte": "2023-09-30T19:55:54.611Z",
              "gte": "2023-09-27T19:55:54.611Z"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "distinct_cIds": {
      "terms": {
        "field": "metaData.cId",
        "order": {
          "max_date1": "desc"
        }
      },
      "aggs": {
        "max_date1": {
          "max": {
            "field": "metaData.date1"
          }
        },
        "distinct_itemId": {
          "terms": {
            "field": "itemDetails.itemId"
          },
          "aggs": {
            "top_doc": {
              "top_hits": {
                "size": 2,
                "sort": [
                  {
                    "metaData.date1": "desc"
                  },
                  {
                    "metaData.date2": "desc"
                  }
                ],
                "_source": {
                  "includes": [
                    "itemDetails.itemId",
                    "itemDetails.usecase",
                    "metaData.cId",
                    "metaData.date1"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.