ES通过脚本获取数组对象,以及Kibana相关操作
2018-02-27 18:31
1081 查看
mapping
data: { properties: { data_value: { type: "long" }, index: { type: "long" }, } }
数据
{ data: [ { index: 0, data_value: 200 }, { index: 1, data_value: 300 }] }
当时需求是在Kibana上实现,故以下皆以Kibana作例,若是单纯的写ES的查询或聚合语句,可直接参考script内容。
How to create Kibana Script Fields
在ES中支持查询返回一个script value,即在查询时就进行相应的script计算。elasticsearch script fields starting.
既然是script,自然就灵活很多,可以通过添加新的字段,将上面的数组对象中的值转换为key-value格式的,那么在聚合统计操作中选择对应的key即可。
具体操作为,在Kibana中选择Management中的Index Patterns,选中对应index,选择Scripted field,新建一个(Add Scripted Field)。Name填入如data_index_0,Language选择painless,Type选择为number。script内容为
if(params['_source']['data'] != null) { for(def item : params['_source']['data']) { if(item.index == 0) return item.data_value; } } return null;
最后选择创建字段即可,在Discover页面中即可看到每条数据中都增加了data_index_0,其值为index=0时对应的data_value。这样就将对象数组中的数据搬出来以key-value的方式存在了。另外,官方在介绍Scripted Fields时说明尽量不要使用_source字段,会使搜索变慢,以后在使用的过程中最好还是使用doc。如获得data.index的方式为doc[‘data.index’].values,返回值为List。
相关文章推荐
- ElasticSearch数组对象,以及Kibana相关操作
- BOM__Document对象简介-三种获取节点方式,通过节点层次关系获取节点,以及对象中的属性操作
- 如何通过css选取元素以及封装了获取,删除css的相关操作
- robotium 中通过id获取 View 以及进行相应的操作
- 通过注册表以及文件操作的方式获取当前正在实际使用的物理网卡MAC地址
- 前台获取后台的数据,通过JSON后去后台的对象的数组
- arcgis总结——地理信息服务的发布以及通过rest服务进行geocode相关操作
- 通过反射获取泛型参数数组(Class对象 List类型)
- 对象、对象数组、JSON、JSON数组的相关操作
- 通过编写一个程序,来说明字符数组 以及操作字符数组的函数的用法。该程序读入一组文本行,并把最长的文本行打印出来。
- Javascript中获取数组最大值和最小值以及最大值和最小值的下标 没学对象前的最简单最基本的方法
- 操作对象 以及获取内存中的style
- 对象的克隆和数组的相关操作
- jQuery 1.6 源码学习(六)——core.js[6]之jQuery对象/数组操作相关方法
- robotium 中通过id获取 View 以及进行相应的操作
- 通过runtime获取对象相关信息
- 对JS克隆以及相关属性,数组,对象,函数的实例分析
- HTMLCollection 对象详解,以及为什么循环获取的dom合集操作可能会出现下标不正确的情况?
- robotium 中通过id获取 View 以及进行相应的操作
- JavaScript-通过属性名,获取对象相关属性的值