问题描述
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
此后,在处理过程中,您需要除以_
,否则您就可以使用脚本了。