Filter 弹性搜索查询-如何对结果进行分组并对结果执行操作
我对弹性搜索非常陌生。因此,在弹性搜索中编写用例查询时需要帮助 我们有一个场景,需要对查询结果执行操作,还需要对数据进行一些分组。 例如,考虑下面的样本用例。 文档包含如下字段和值:Filter 弹性搜索查询-如何对结果进行分组并对结果执行操作,filter,
elasticsearch,aggregation,facet,Filter,
elasticsearch,Aggregation,Facet,我对弹性搜索非常陌生。因此,在弹性搜索中编写用例查询时需要帮助 我们有一个场景,需要对查询结果执行操作,还需要对数据进行一些分组。 例如,考虑下面的样本用例。 文档包含如下字段和值: documentId : 1284che3t3bdf2 playerName : John playerId : 123456 timestamp : X milliseconds (long value) status : START_SPRINT documentId : 45645bf6cxf3674 pl
documentId : 1284che3t3bdf2
playerName : John
playerId : 123456
timestamp : X milliseconds (long value)
status : START_SPRINT
documentId : 45645bf6cxf3674
playerName : John
playerId : 123456
timestamp : Y milliseconds (long value)
status : END_SPRINT
现在我们必须找回球员约翰完成冲刺所花费的时间
也就是说,我们需要得到时间差(Y-X)
玩家名称:约翰
我们还需要所有玩家完成冲刺所需的平均时间。
通过查看文档,我们可以使用聚合和过滤器来实现这一点
如果您有任何查询方面的帮助或编写这些查询的指针,我们将不胜感激
到目前为止,可以使用脚本化度量聚合编写以下查询:
这与MapReduce有什么关系?到目前为止,您尝试了什么?到目前为止,我能够用术语编写一个方面查询。已开始尝试使用度量聚合进行查询。请使用您编写的方面查询进行更新!更新了上面我可以写的查询。我现在遇到了一些解析错误,希望我的方向是正确的。请告诉我,你是在跟我开玩笑吧?您刚刚复制了示例并粘贴到这里!
{
"query" : {
"match_all" : {}
},
"aggs": {
"average": {
"scripted_metric": {
"init_script" : "_agg['timestamps'] = []",
"map_script" : "if (doc['status'].value == \"END\") {
_agg.timestamps.add(doc.timestamp.value)
} else {
_agg.timestamps.add(-1 * doc.timestamp.value) }",
"combine_script" : "total = 0;
average = 0;
for (t in _agg.timestamps) { total += t };
average = total/_agg.timestamps.length;
return average",
"reduce_script" : "average = 0;
for (a in _aggs) { average += a };
return average"
}
}
}
}