【问题标题】:Elasticsearch aggregations, get additional field in bucketElasticsearch 聚合,获取桶中的附加字段
【发布时间】:2015-06-02 08:11:49
【问题描述】:

我查询 ES 索引以过滤结果并按所选术语获取聚合。示例查询如下所示:

GET buyer_requests/vehicle_requests/_search
{
  "query": {
    "filtered": {
        "filter": {
          "and": [
            {
              "terms": {
                "vehicle.make.raw": [
                  "Audi",
                  "BMW",
                  "Chevrolet"
                ]
              }
            },
            {
              "range": {
                "style.price": {
                  "gte": 15000,
                  "lte": 20000
                }
              }
            },
            {
              "geo_distance": {
                "distance": "20000km",
                "info.pin": {
                  "lat": 42,
                  "lon": 21
                }
              }
            }
          ]
        }
    }
  }, 
  "aggs": {
    "makes": {
      "filter": {
        "range": {
          "style.price": {
            "gte": 5000,
            "lte": 40000
          }
        }
      },
      "aggs": {
        "makes": {
          "terms": {
            "field": "vehicle.make.raw",
            "order": {
              "_term": "asc"
            }
          }
        }
      }
    },
    "model": {
      "filter": {
        "and": [
          {
            "terms": {
              "vehicle.make.raw": [
                "Audi",
                "BMW",
                "Chevrolet"
              ]
            }
          }
        ]
      },
      "aggs": {
        "models": {
          "terms": {
            "field": "vehicle.model.raw",
            "size": 10,
            "order": {
              "_term": "asc"
            }
          }
        }
      }
    }
  }
}

我得到的结果是这样的:

如何在“模型”的“存储桶”部分中获取结果集中的另一个字段。我想获得对 Makes 的引用,因此结果如下所示:

"model": {
   "doc_count": 7,
   "models": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
         {
            "key": "3 Series",
            "make": "bmw",                  <----------- this key
            "doc_count": 3
         },
         {
            "key": "4 Series",
            "make": "bmw",                  <----------- this key
            "doc_count": 4
         },
         {
           "key": "Camaro",
           "make": "chevrolet",             <----------- this key
           "doc_count": 2
         }
      ]
   }
}

【问题讨论】:

    标签: elasticsearch elastica


    【解决方案1】:

    您需要将 models 聚合作为 make 聚合的子聚合移动,并稍微重新排列 filter 聚合。结果不会像您期望的那样在语法上,但在语义上您将获得所需的数据。

    GET buyer_requests/vehicle_requests/_search
    {
      "query": {
        "filtered": {
          "filter": {
            "and": [
              {
                "terms": {
                  "vehicle.make.raw": [
                    "Audi",
                    "BMW",
                    "Chevrolet"
                  ]
                }
              },
              {
                "range": {
                  "style.price": {
                    "gte": 15000,
                    "lte": 20000
                  }
                }
              },
              {
                "geo_distance": {
                  "distance": "20000km",
                  "info.pin": {
                    "lat": 42,
                    "lon": 21
                  }
                }
              }
            ]
          }
        }
      },
      "aggs": {
        "makes": {
          "filter": {
            "and": [
              {
                "terms": {
                  "vehicle.make.raw": [
                    "Audi",
                    "BMW",
                    "Chevrolet"
                  ]
                }
              },
              {
                "range": {
                  "style.price": {
                    "gte": 5000,
                    "lte": 40000
                  }
                }
              }
            ]
          },
          "aggs": {
            "makes": {
              "terms": {
                "field": "vehicle.make.raw",
                "order": {
                  "_term": "asc"
                }
              },
              "aggs": {
                "models": {
                  "terms": {
                    "field": "vehicle.model.raw",
                    "size": 10,
                    "order": {
                      "_term": "asc"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2023-03-03
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多