Elasticsearch技术解析与实战.html.pdf
《Elasticsearch技术解析与实战.html.pdf》由会员分享,可在线阅读,更多相关《Elasticsearch技术解析与实战.html.pdf(46页珍藏版)》请在三一文库上搜索。
1、前言 Elasticsearch是目前全球最受欢迎的全文搜索引擎。初识Elasticsearch是在2012年的一个项目中,当时Elasticsearch还是0.19.0版本,但是功能已经比较强大,只是接口稍微有点复杂。到了2015年年 初,公司开发了一款日志分析产品,它实时不间断地采集用户网络中各种不同系统的日志,然后从中分析系统的安全情况、系统情况、业务情况。最初所有的数据都存储在MySQL中,随着日志的不断增 加,MySQL搜索速度越来越慢。后来在更换技术架构选型的时候又想到了Elasticsearch,这个时候Elasticsearch已经是1.6.0版本了。我们对此进行了简单的测试,
2、在上亿条的数据搜索中很多都在一秒内完 成,在上亿条的数据中进行统计分析大多也是在秒级完成,它展示了强大实力。我们顺势就把Elasticsearch整合到了现在的产品中,取得了很好效果。到了2016年3月的时候,Elasticsearch发布了2.3.0版 本,各方面更加成熟,我们的产品又再一次升级到这个新版本上。 Elasticsearch产品的更新变化非常快,在我们开发研究的过程中基本上找不到新版本的中文资料,目前市场上介绍Elasticsearch的中文书籍都是在版本1.0左右,甚至更早,这些书的很多内容尤其是开 发接口相关的部分都已经过时,没有办法在新版本中使用。所以我们开发的过程中基本
3、上都是研究官方文档,有时候甚至研究它的源码才能解决问题。在接口选择的时候我们在HTTP JSON接口和Java接口 中做了取舍,我们当时分析HTTP JSON接口最终还是要转换成Java接口,不如直接使用Java接口,一是效率可能更高,二是在部署实施的时候减少一个端口,三是对后续的升级更有利,比如后续增加权限 认证等。但这些东西都没有资料,我们基本上都是研究系统源码来克服的。在后续研究过程中,我们发现HTTP接口转换到Java接口是有规律的,所以对HTTP接口的掌握对后续Elasticsearch的开发和扩展 也有很大的帮助。在持续研究的过程中,我们积累了大量经验,并想把这些经验分享给更多需要
4、的人。后来我把这个想法给出版社的吴怡编辑做了沟通,她非常支持我们的想法,便有了这本书。 本书首先介绍Elasticsearch的相关基础知识,然后由浅入深地介绍Elasticsearch索引查询相关的知识,包括索引、映射、搜索、聚合,接着介绍Elasticsearch的集群、分词、重要的配置等高级功能, 以及Elasticsearch相关的其他产品,包括告警、监控、权限管理,最后通过一个ELK示例结束本书。在写作的时候考虑到读者的接受能力,由浅入深地进行讲解,建议读者从前往后阅读。 本书主要内容包括: 第1章 “Elasticsearch入门”,介绍Elasticsearch是什么、Apach
5、e Lucene的基础知识、Elasticsearch的术语、JSON介绍、Elasticsearch的安装运行、Elasticsearch的HTTP接口和Elasticsearch的 Java API接口。 第2章 “索引”,介绍和Elasticsearch索引相关的接口,包括索引管理、索引映射管理、索引别名、索引设置、索引监控、索引其他重要接口以及文档管理。 第3章 “映射”,介绍Elasticsearch文档的内部结构,Elasticsearch支持的字段类型,除此之外,本章还将展示Elasticsearch内置的元字段,映射的参数和动态映射功能。 第4章 “搜索”,详细介绍和搜索相关的
6、知识,包括搜索的详细参数,搜索的评分机制、滚动查询、系统内部隐藏内容的查询、搜索模板等;接着介绍Elasticsearch的领域查询语言DSL(Domain- specific Language)相关的知识点;最后介绍Elasticsearch的精简查询接口。 第5章 “聚合”,聚合可以对文档中的数据进行统计汇总、分组等,通过聚合可以完成很多的统计功能,该章介绍聚合相关的知识,包括度量聚合、分组聚合和管道聚合。 第6章 “集群管理”,详细介绍和集群相关的内容,包括集群的监控、集群分片迁移、集群的节点配置、集群发现、集群平衡的原理和配置。 第7章 “索引分词器”,介绍Elasticsearch的
7、分词器和分词的原理,以及如何添加新的分词器等;还介绍Elasticsearch的插件相关知识,包括插件安装等。 第8章 “高级配置”,介绍Elasticsearch的高级配置,包括网络配置、脚本配置、快照和恢复配置、线程池配置和索引配置。 第9章 “告警、监控和权限管理”,介绍Elasticsearch官方支持的几个比较好的插件:Watcher、Marvel、Shield,它们可以对Elasticsearch进行告警、监控和权限管理。 第10章 “ELK应用”,介绍Elasticsearch与另外两个产品Logstash和Kibana如何组合使用,Logstash是对日志进行收集和处理,Kib
8、ana是对存储在Elasticsearch中的索引进行展示和报表分析;最 后通过一个简单的示例来介绍ELK几个产品是如何关联的。 在编写本书的时候,Elasticsearch的最新版本是2.2.0,但本书准备正式出版的时候,Elasticsearch发布了最新的5.0版本。所以本书增加了一个附录专门介绍5.0版本的特性与改进。本书前面的部分截 图是2.2.0版本的,书中所有的例子和功能都可以在Elasticsearch 2.3.3下运行,大部分的功能都可以在5.0下运行,详细的新版本差别请参考附录部分。本书中的例子大部分都是HTTP接口的,这些接口的测 试使用了Elasticsearch He
9、ad插件。如果你想使用另一种工具,请注意修改HTTP请求的格式和编码,以便适合你所选择的工具。书中例子的结构大多是JSON格式,美化后的JSON格式比较容易阅读,但美 化后的JSON格式比较长,所以我们在不影响阅读的情况下,对美化后的格式做了简单调整。书中还有一小部分是Java接口,我们在实验时用的是Eclipse工具,其他主流的Java开发工具都适用。 本书的目标读者是对全文检索和Elasticsearch有兴趣的读者,如果你是一个初学者,通过本书你将学到Elasticsearch的基础知识,以及如何使用一些高级功能。如果你已经知道并使用了Elasticsearch 但又想深入了解其本身,想
10、了解如何改进查询相关性,如何使用Elasticsearch Java API等,也会发现本书的实用性。 由于时间紧,能力有限,编写的过程中难免有不当之处,还请各位读者不吝指出。 致谢 在此,首先我想感谢我的家庭,多年以来,因为工作关系我照顾他们太少,他们为我付出太多;我在全身心投入本书写作的时候,他们同样表现出了极大的耐心,是我最坚强的后盾。 其次还要感谢赛克蓝德公司以及公司的同事:周忠立、万荣慧和夏海华,是他们的辛勤工作才完成本书的编写工作,尤其是周忠立在很多章节的编写上贡献了很多的内容;同时要感谢本书的出版团 队,尤其是吴怡编辑,写书是件非常艰巨的任务,很多内容需要反复推敲才能表达准确的意
11、思,吴怡在检查错误、校稿、消除表达歧义等方面做出了很多贡献。 最后,非常诚挚地感谢所有Elasticsearch项目的创建者和开发者,感谢他们杰出的工作和对开源项目的热情。没有他们,就没有本书的诞生,没有他们,开源搜索引擎就不会有现在这种活力。再次感 谢! 朱林 2016年10月于南京 第1章 Elasticsearch入门 欢迎来到Elasticsearch世界,它目前是全球最受欢迎的全文搜索引擎。你对Elasticsearch和全文搜索有没有经验都不要紧。我们希望你可以通过这本书走进Elasticsearch的大门。这本书是为初学者准 备的,当然对于中高级的人员也有参考作用。我们首先介绍一
12、些和Elasticsearch相关的基础内容。接着介绍一下Elasticsearch的安装和配置。此外本章还会介绍如何简单使用Elasticsearch,包括HTTP JSON接口和Java接口。在学习这些接口的过程中,不用陷入太多的细节,后面的章节会逐步展开并细化接口内容。读完本章,你将学到以下内容: Elasticsearch介绍 全文搜索 Elasticsearch的基础知识 安装和配置Elasticsearch HTTP REST API接口 Java开发接口 1.1 Elasticsearch是什么 Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、REST
13、ful接口全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以 百计的服务器存储以及处理PB级的数据。它可以在很短的时间内存储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成,称为垂直扩展或者向上扩展(Vertical Scale/Scaling Up),或增加更多的服务器来完成,称为水平扩展或者向 外扩展(Horizontal Scale/Scaling Out)。 尽管ES能够利用更强劲的硬件,垂直扩展毕竟还是
14、有它的极限。真正的可扩展性来自于水平扩展,通过向集群中添加更多的节点来分担负载,增加可靠性。 在大多数数据库中,水平扩展通常都需要你对应用进行一次大的重构来利用更多的节点。而ES天生就是分布式的:它知道如何管理多个节点来完成扩展和实现高可用性。这也意味着你的应用不需要做 任何的改动。 我们举几个例子来说明Elasticsearch能做什么? 当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用Elasticsearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。 当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行
15、统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这些数据存储到 Elasticsearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。 当你运行一个价格提醒的平台,可以给客户提供一些规则,例如客户有兴趣购买一个电子设备,当商品的价格在未来一个月内价格低于多少钱的时候通知客户。在这种情况下,你可以把供应商的价 格,把他们定期存储到Elasticsearch中,使用定时器过滤来匹配客户的需求,当查询到价格低于客户设定的值后给客户发送一条通知。 当有大量数据(千万条以上的记录)时,你有商业智能分析的需求,希望快速调查、分析和可视化。在这种情况下
16、,你可以使用Elasticsearch来存储你的数据,然后用Kibana建立自定义的仪表板或者 任何你熟悉的语言开发展示界面,你可以使用Elasticsearch的聚合功能来执行复杂的商业智能与数据查询。 对于程序员来说,比较有名的案例是GitHub,GitHub的搜索是基于Elasticsearch构建的,在 request,还有代码。共有4050个索引 库,分别用于索引网站需要跟踪的各种数据。虽然只索引项目的主分支(master),但这个数据量依然巨大,包括20亿个索引文档,30TB的索引文件。 1.2 全文搜索 全文搜索是指计算机搜索程序通过扫描文章中的每一个词,对每一个词建立一个索引,
17、指明该词在文章中出现的次数和位置,当用户查询时,搜索程序就根据事先建立的索引进行查找,并将查找的结 果反馈给用户。这个过程类似于通过字典中的搜索字表查字的过程。Lucene是目前全球使用最广的全文搜索引擎开源库。 1.3 基础知识 在Elasticsearch中有很多的术语和概念,为了后面更好地理解和阅读本书,本节先介绍一下这些术语和概念,然后介绍一下Elasticsearch存储的格式JSON。 1.4 安装配置 下面是安装Elasticsearch所需要的几个步骤,接下来几节将详细说明。 1.5 对外接口 Elasticsearch对外提供的API是以HTTP协议的方式,通过JSON格式以
18、REST约定对外提供。 HTTP配置文件是放在elasticsearch.yml中,注意,所有与HTTP配置相关的内容都是静态配置,也就是需要重启后才生效。HTTP对外接口模块是可以禁用的,只需要设置http.enabled为false即可。 Elasticsearch集群中的通信是通过内部接口实现的,而不是HTTP协议。在集群中不需要所有节点都开启HTTP协议,正常情况下,只需要在一个节点上开启HTTP协议。 1.6 Java接口 Elasticsearch本身是Java开发的,天生对Java的支持能力是最好的,所以用Java来开发Elasticsearch应该是一个不错的选择。 1.7 小
19、结 本章介绍了全文搜索Elasticsearch的基本概念和历史,介绍了需要掌握Elasticsearch的基础知识。Elasticsearch的安装、配置和升级操作,使用Elasticsearch REST API和Java接口来索引、更新、搜 索、删除数据。通过学习本章,应该对Elasticsearch有了基本的认识。 第2章 索引 索引是具有相同结构的文档集合。在Elasticsearch中索引是个非常重要的内容,对Elasticsearch的大部分操作都是基于索引来完成的。本章介绍索引的映射、设置、监控管理,以及索引的状态和文档 操作管理。 2.1 索引管理 第1章里已经启动了集群并创
20、建了默认的索引,除了默认的索引配置外,我们还可以通过索引管理来对索引进行更高级别的操作。首先了解一下创建索引的过程,后面将介绍其他相关操作。 2.2 索引映射管理 在前面例子中Elasticsearch创建文档的时候,是没有指定索引参数,这个时候系统会自动判断每个维度的类型,有很多时候需要我们进行一些更高级的设置,比如索引分词,是否存储等。 2.3 索引别名 在Elasticsearch所有的API中,对应的是一个或者多个索引。Elasticsearch可以对一个或者多个索引指定别名,通过别名可以查询到一个或者多个索引的内容。在内部,Elasticsearch会自动把别名映射 到相应的索引上。
21、可以对别名编写过滤器或者路由,在系统中别名不能重复,也不能和索引名重复。其实Elasticsearch的别名机制有点像数据库中的视图。例如:为索引test1增加一个别名alias1。 请求:POST http:/127.0.0.1:9200/_aliases 参数: “actions“ : “add“ : “index“ : “secisland“, “alias“ : “alias1“ 删除别名:与请求是一样的,参数不一样: “actions“ : “remove“ : “index“ : “test1“, “alias“ : “alias1“ 注意:别名没有修改的语法,当需要修改别名的时候
22、,可以先删除别名,然后再增加别名,例如: “actions“ : “remove“ : “index“ : “test1“, “alias“ : “alias1“ , “add“ : “index“ : “test1“, “alias“ : “alias2“ 一个别名关联多个索引: “actions“ : “add“ : “index“ : “test1“, “alias“ : “alias1“ , “add“ : “index“ : “test2“, “alias“ : “alias1“ 或者用下面的语法: “actions“ : “add“ : “indices“ : “test1“, “
23、test2“, “alias“ : “alias1“ 或者使用通配符: “actions“ : “add“ : “index“ : “test*“, “alias“ : “all_test_indices“ 注意 通配符指定的索引只是在当前生效,后面添加的索引不会被自动添加到别名上。对某一别名做索引的时候,如果该别名关联多个索引会报错。 1.过滤索引别名 通过过滤索引来指定别名提供了对索引查看的不同视图,该过滤器可以使用查询DSL来定义适用于所有的搜索,计数,查询删除等,以及更多类似这样的与此别名的操作。 要创建一个带过滤的别名,首先我们需要确保映射中已经存在需要过滤的字段: 创建一个索引,请
24、求:PUT http:/127.0.0.1:9200/test1。 参数: “mappings“: “type1“: “properties“: “user“ : “type“: “string“,“index“: “not_analyzed“ 创建过滤别名,请求:POST http:/127.0.0.1:9200/_aliases。 参数: “actions“ : “add“ : “index“ : “test1“,“alias“ : “alias2“, “filter“ : “term“ : “user“ : “kimchy“ 通过别名也可以和路由关联,此功能可以和过滤别名命令一起使用,以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Elasticsearch 技术 解析 实战 html
链接地址:https://www.31doc.com/p-5518982.html