假设我正在存储犯罪记录,其中每条记录的格式如下:
{
"ssn" : "123-45-6789",
"passport" : "85729573",
"crime" : "overpowering the guards"
}
这些记录受以下限制:
ssn
或passport
,但不是两者都可能丢失。ssn
,那么所有他们的记录将保证包含他们的ssn
。
passport
但没有ssn
,那么
这个罪犯只有他们的passport
知道。但是,有些犯罪分子只有ssn
的记录,有些记录同时包含ssn
和passport
。我希望使用单个查询来查看每个犯罪分组的犯罪。我认为最有效的方法是:
ssn
字段是否缺失,将记录分为两组。ssn
ssn
集合”
ssn
passport
集”
醇>
我更倾向于使用一种解决方案,避免在passport
存储桶中ssn
聚合。
基本上,我希望尽可能在ssn
上汇总,只在必要时才会回到passport
。
感谢您的帮助!
答案 0 :(得分:1)
您想要创建一些过滤的聚合。在我的头顶:
{
"aggs": {
"withSsn": {
"filter": {
"exists": {
"field": "ssn"
}
},
"aggs": {
"ssn": {
"terms": {
"field": "ssn"
}
}
}
},
"withoutSsn": {
"filter": {
"missing": {
"field": "ssn"
}
},
"aggs": {
"passport": {
"terms": {
"field": "passport"
}
}
}
}
}
}
(我不确定你的空字段是什么意思,我只是假设它们已经存在或不存在)