我有一个带有两个属性的嵌套字段:
{
"rating": 2
"victim": [{
"ip": "...",
"instanceId": "....""
}]
}
我希望聚合评分并获取每个文档的IP或InstanceId,而不是两者都在存储桶列表中。
到目前为止我得到的是:
"__rating": {
"terms": {"field": "rating"},
"aggs": {
"__hosts": {
"nested": {"path": "victim"},
"aggs": {
"ips": {"terms": {"field": "victim.ip"} } ,
"instances": {"terms": {"field": "victim.instanceId"} }
}
}
}
}
以上聚合为我提供了两个领域的存储桶,但我需要一个或其他。
感谢。
答案 0 :(得分:0)
您需要在elasticsearch中使用源过滤。在查询顶部添加以下代码:
{
"csv|false|false|1" => [
MyApp::Model::SendDestination @values = {
... # I removed the unnecessary key-values for demo purposes
:address => "3", # this should be "1"
...
}],
"csv|false|false|2" => [
MyApp::Model::SendDestination @values = {
...
:address => "3", # this should be "2"
...
}],
"csv|false|false|3" => [
MyApp::Model::SendDestination @values = {
...
:address => "3", # this is correct
...
}]
}
如果您想了解有关源过滤的更多详细信息,请check this out。
答案 1 :(得分:0)
经过大量的搜索,我找到了通过无痛脚本来做到这一点的方法:
"terms" : {
"script" : {
"source": "doc['victim.instanceId'].value == null ? doc['victim.ip'] : doc['victim.instanceId']",
"lang": "painless"
},
"missing": "N/A"
}