我需要能够基于索引字段中的多个值即时存储数据。
例如-如果我的索引包含car models关键字类型(众所周知的有限列表)和汽车价格,我希望根据汽车类型进行汇总,以获取该模型的汽车数量和价格总和。 我知道最好的办法是将汽车型号信息保留在索引本身中,但这不是当前的选择。
我希望进行以下分组:
minivan
odyssey, sienna, caravan
sedan
corolla, accord, regal
suv
rav4, rogue, crv
other
pinto
并产生如下输出:
minivan - num 2,010, price 80,000,000
sedan - num 2,001, price 70,000,000
suv - num 2,010, price 60,000,000
other - num 2,100, price 75,000,000
我找到了一种通过子聚合使用Java来实现此目的的方法-似乎非常不理想。还有另一种方法吗?
GlobalAggregationBuilder topValues = AggregationBuilders.global("carmodels");
List<String> other = new ArrayList<>();
for (Map.Entry<String, List<String>> mappings : cars.entrySet()) {
List<String> carmodels = mappings.getValue();
other.addAll(carmodels);
String[] includes = carmodels.toArray(new String[carmodels.size()]);
topValues.subAggregation(AggregationBuilders.terms(mappings.getKey())
.field("carmodel")
.includeExclude(new IncludeExclude(includes, /*excludeValues*/ null)));
}
topValues.subAggregation(AggregationBuilders.terms("Other")
.field("carmodel")
.includeExclude(new IncludeExclude(/*includeValues*/ null, excludes.toArray(new String[excludes.size()]))));
感谢您的帮助/建议。