搜索与分析引擎——Elasticsearch之初探与实践

此篇博客是我的第一篇技术性博客,用于回顾和总结最近本人关于Elasticsearch的调研成果和使用经验。其内容更偏向于实践,理论知识较少。若有不足之处,欢迎指正。

elastic: [ɪˈlæstɪk],可伸缩的、灵活的;search:搜索,顾名思义,这是一个十分灵活的用于搜索的工具,它本身具有存储数据的功能。最近一个月使用下来,发现它的搜索和数据处理功能(聚合)非常强大。数据的增删查改均是通过RESTful API来实现的,所以通用性很强,几乎所有开发语言都可以实现它的调用。


一、如何在linux平台上安装?

1、准备工具:jdk1.8安装包、Elasticsearch6.2.3安装包、Kibana安装包(Elasticsearch网页版工具);

2、安装jdk(自行百度)

3、将Elasticsearch安装包解压到公共目录下,比如/data/es

4、由于Elasticsearch禁止使用root用户启动,所以需要新建一个普通用户esuser,并为这个用户赋予相关目录的权限(777)

5、为了将Elasticsearch暴露出来供其他计算机远程访问,需要修改配置文件

①vim ./bin/config/elasticsearch.yml,如图:

修改为自己的host

②vim ./bin/config/jvm.options,如图:

③vim /etc/sysctl.conf,如图:

然后:sysctl -p

④vim /etc/security/limits.conf

6、一定要退出终端,重新用esuser用户登录,然后再启动: ./bin/elasticsearch

7、安装Kibana

①解压安装包,下载地址:https://www.elastic.co/downloads/kibana

②修改配置文件:vim ./config/kibana.yml,如图:

修改为自己的host

③启动:nohup bin/kibana &

④打开地址:http://{host}:5601

二、如何在Kibana上使用Elasticsearch?

1、使用界面如下,Dev Tools即是我们的调试工具

中间为请求路径与参数,Kibana可以自动补全,自动保存请求信息,右边为请求的返回结果

2、新建一张表,在你第一次向Elasticsearch推送数据的时候,它会自动生成索引(_index,相当于数据库name)和类型(_type相当于表name),请求信息如下:

它会自动创建_index=servicequality,_type=doc,_id=36的一条数据,如果不指定_id,Elasticsearch将自动生成。其中各个属性的值就是请求参数,该“表”的各个属性的类型也因此确定下来,不能更改了!

3、查询数据:GET /servicequality/doc/36,结果如下:

_source 代表源数据

4、更新数据,同第2步,改变对应属性的值即可

5、删除数据:DELETE /servicequality/doc/36

6、查询各个属性的类型:GET /servicequality/doc/_mapping(一但创建了数据,则不能更改该_index该_type下属性的类型)

7、重中之重,复杂查询与聚合

如下图,我是想查出namespace=“oneNet.service.HTTP-PUSH.mqtt-to-http.push”,metric=“time-delay”,region=“BEIJING”,timeStamp大于1525851600且小于1525938000的数据,然后将查询到的数据进行聚合。聚合逻辑是:以timeStamp属性进行分段统计,每隔720为一段,对每一段的数据求两次和,一次是满足skey=“count”的数据求value字段的和,一次是满足skey=“accumulator”的数据求value字段的和(前者是业务中的概念——数量,后者是业务中的概念——累计总和),这样我就可以通过两者的值求出平均值。

但除此之外,细心的你可能已经发现请求体里还包含了其他关键字,这些参数都是我们踩过的坑啊!

size=0,指定返回源数据的个数,默认是10,0则代表不放源数据,只返回聚合后的结果。

nameSpace.keyword,如果不添加keyword,则Elasticsearch将会将“oneNet.service.HTTP-PUSH.mqtt-to-http.push”进行拆词分析,可能会查询出等于“oneNet.service.HTTP-PUSH.edp-to-http.push”的结果,加上了keyword则不会进行分析,而是完全匹配。

aggs,aggregation=聚合。使用结构"aggs":{ "agg_A":{...可以添加子聚合"aggs"},    "agg_B":{...} }

histogram:直方图。这是Elasticsearch的其中一种聚合方式(可以理解为分段聚合),除此之外,还有针对date格式的date_histogram聚合

offset:偏移量,补偿。Elasticsearch默认是从0开始分段的,不加offset,则分段为:[0,720) [720,1440) [2160,2880)......[1525851360,1525852180)......,但我希望我们的起始点1525851600恰好是新的一段的开始,所以添上偏移量240(1525851600取模720等于240),这样分段为:[240,960) [1680,2400).....[1525851600,1525852320)...

extended_bounds:延伸的界限。如果不加extended_bounds,当查询范围内没有数据的时候,它不会返回聚合结果,加上之后,它会强制性返回该范围内的聚合结果,如果没有数据,则为0。

sum:求和。除此之外,还有avg求平均值等等,大约共十种计算方式。

复杂查询的请求体
查询结果

三、在java中的使用

1、使用环境:java8、spring boot 2.0.0、maven3.5.2

2、maven dependency:

3、配置Elasticsearch TransportClient

4、将Kibana中的请求体转换为java代码:

5、执行查询,解析结果,获得每一段的两个和,然后相除,得到平均值。

执行查询,解析结果
需要注意紫色横线部分,右侧都是getAggregations().get("xxx"),但左侧分别是Filter和Sum,这是两种聚合对象,必须根据自己请求体的聚合类型来,不然会解析失败。

附注:

参考资料:

Elasticsearch官方中文文档

format about date官方英文文档

aggregations官方英文文档

histogram aggregation and offset官方英文文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容