【发布时间】:2022-01-19 07:17:53
【问题描述】:
我想在 Elasticsearch 中实现 SQL 的功能。考虑下表:
我想要实现的是聚合列的不同值,SQL 等效:
select product,min(distinct price) from test group by product;
Expected output:
聚合可以是任何标准聚合,例如min、max、sum、avg、count 等。
我已经尝试过使用无痛脚本,我可以通过无痛脚本实现所需的输出,但是以编程方式生成无痛脚本非常困难。
我正在寻找可以以编程方式生成的 EQL 查询或可以以编程方式生成无痛脚本的一些 java 插件。
Edit:
我试过的无痛脚本:
{
"aggs": {
"terms": {
"scripted_metric": {
"init_script": "state.rawMap = [:];",
"map_script": "def product = doc['product'].value;state.rawMap.putIfAbsent(product, new ArrayList());def price = doc['price'].value;if(!state.rawMap.get(product).contains(price)){state.rawMap.get(product).add(price);}",
"combine_script": "List outputList=new ArrayList();for (entry in state.rawMap.entrySet()) {def map=[:]; def min=entry.getValue().get(0); for(price in entry.getValue()){if(price<min){min=price;}}map.product=(entry.getKey()); map.min_price=min;outputList.add(map);}return outputList;"
}
}
}
}
【问题讨论】:
-
你能展示你到目前为止尝试过的查询吗...我看不出这与简单的术语聚合+最小子聚合有什么不同...好奇...
-
我使用了无痛脚本。我无法使用 EQL 实现这一点。
-
请显示查询,否则我们在黑暗中拍摄
-
@Val 我已经添加了我尝试过的无痛脚本。
标签: java elasticsearch