假设我要存储犯罪记录,其中每个记录具有以下形式:{ "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
。谢谢您的帮助!
最佳答案
您将要创建几个过滤的聚合。在我头上:
{
"aggs": {
"withSsn": {
"filter": {
"exists": {
"field": "ssn"
}
},
"aggs": {
"ssn": {
"terms": {
"field": "ssn"
}
}
}
},
"withoutSsn": {
"filter": {
"missing": {
"field": "ssn"
}
},
"aggs": {
"passport": {
"terms": {
"field": "passport"
}
}
}
}
}
}
(我不确定您所说的空字段是什么意思,我只是假设它们是否存在)
关于elasticsearch - ElasticSearch中的后备聚合字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46289184/