我在一个字段“ strArray”中有字符串数组:
strArray: ['browser:IE', 'device:PC', 'country:USA', 'state:CA']
我需要按浏览器(设备,国家或地区)进行汇总。如果我知道strArray字段中这些值的顺序,那不是问题。
我可以使用那些结构:
"aggs": {
"deviceAggs": {
"terms": {
"script": "doc['strArray'][1]"
}
}
}
但是问题在于插入这些字符串的顺序可能不同。
我怎样才能做到这一点 ?我考虑了几种方法:
脚本-使用像子字符串这样的函数,仅获取“正确”的值。
过滤-可以从数组中过滤一个值(其中包含字符串“ device:”)。
将strArray值排序以将所有值按确定的顺序排序,但是“排序”给我带来奇怪的结果-仅返回一个元素(不进行任何过滤)。
不要问我,为什么我有这个结构(这不是我的选择),如果我们有结构键:值-我们不会有问题。
脚本只能在这里直接进行。要了解如何在聚合中使用脚本,请参考此博客。
像下面这样的东西应该工作
for(element in doc['strArray'].values){
if(element.startsWith('browser')){
return element;
}
};
return null;
排序和过滤都是在文档级别而不是元素级别完成的。在元素级别,如果可以将此数组设置为nested,则可以进行过滤。首先,您需要将结构更改为-
strArray: [
{ "name" : 'browser:IE' } ,
{ "name" : 'device:PC' }
]
然后将strArray字段设置为嵌套。在这种情况下,您可以基于前缀查询进行嵌套过滤(使用query filter),然后对数据进行嵌套聚合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句