如何解决数组索引或替代解决方案上的Elasticsearch聚合
elasticsearch中有一些类似于以下示例的文档:
{
"id": "<<some id>>","list": [
"a","b","c"
]
}
{
"id": "<<some id>>","list": [
"c","a"
]
}
例如list
可以按任意顺序包含a
,b
和c
,而不必全部包含。 list
中元素的顺序很重要。
我想运行这些存储桶聚合:
- 多少个文档在任何位置上包含
a
- 多少个文档包含
a
在第一位置
当前文档结构是否可能?我可以用其他方式构造文档吗?
如果当前的结构无法实现,我想考虑一下类似的东西
{
"id": "<<some id>>","list": {
"values": ["c","a"],"ordered": {
"0": "c","1": "a"
}
}
}
或
{
"id": "<<some id>>","ordered": {
"a": 1,"c": 0
}
}
}
使用后者,我还可以运行诸如a < c
之类的聚合。
感谢您的帮助
解决方法
可能还有其他更好的方法,但是如果您可以像存储位置一样存储它,然后再输入密钥:
{
"id": "<<some id>>","list": [
"1_a","2_b","3_c"
]
}
另一个文档,
{
"id": "<<some id>>","list": [
"1_c","2_a"
]
}
然后您可以对其进行常规聚合,并且返回类似以下内容的
1_a:1
2_a:1 ... etc
此后,在处理过程中,您需要除以_
,否则您就可以使用脚本了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。