这个世界已然被数据淹没。多年来,我们系统间流转和产生的大量数据已让我们不知所措。 现有的技术都集中在如何解决数据仓库存储以及如何结构化这些数据。 这些看上去都挺美好,直到你实际需要基于这些数据实时做决策分析的时候才发现根本不是那么一回事。
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力,这是通常没有预料到的。 它存在还因为原始数据如果只是躺在磁盘里面根本就毫无用处。
无论你是需要全文搜索,还是结构化数据的实时统计,或者两者结合,这本指南都能帮助你了解其中最基本的概念, 从最基本的操作开始学习 Elasticsearch。之后,我们还会逐渐开始探索更加高级的搜索技术,不断提升搜索体验来满足你的用户需求。
Elasticsearch 不仅仅只是全文搜索,我们还将介绍结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 我们还将探讨如何给数据建模来充分利用 Elasticsearch 的水平伸缩性,以及在生产环境中如何配置和监视你的集群。
这本书是写给任何想要把他们的数据拿来干活做点事情的人。不管你是新起一项目从头开始还是为了给遗留系统改造换血, Elasticsearch 都能够帮助你解决现有问题和开发新的功能,有些可能是你之前没有想到的功能。
这本书既适合初学者也适合有经验的用户。我们希望你有一定的编程基础,虽然不是必须的,但有用过 SQL 和关系数据库会更佳。 我们会从原理解释和基本概念出发,帮助新手在复杂的搜索世界里获得一个稳定的基础。
具有搜索背景的读者也会受益于这本书。有经验的用户将懂得其所熟悉搜索的概念在 Elasticsearch 是如何对应和具体实现的。 即使是高级用户,前面几个章节所包含的信息也是非常有用的。
最后,也许你是一名 DevOps,其他部门一直尽可能快的往 Elasticsearch 里面灌数据,而你是那个负责阻止 Elasticsearch 服务器起火的消防员。 只要用户在规则内行事,Elasticsearch 集群扩容相当轻松。不过你需要知道如何在进入生产环境前搭建一个稳定的集群,还能要在凌晨三点钟能识别出警告信号,以防止灾难发生。 前面几章你可能不太感兴趣,但这本书的最后一部分是非常重要的,包含所有你需要知道的用以避免系统崩溃的知识。
我们写这本书,因为 Elasticsearch 需要更好的阐述。 现有的参考文档是优秀的 — 前提是你知道你在寻找什么。它假定你已经熟悉信息检索的概念、分布式系统原理、Query DSL 和许多其他相关的概念。
这本书没有这样的假设。它的目的是写一本即便是一个完全不懂的初学者(不管是搜索还是分布式系统)也能拿起它简单看完几章,就能开始搭建一个原型。
我们采取一种基于问题求解的方式:这是一个问题,我该怎么解决? 如何对候选方案进行权衡取舍?我们从基础知识开始,循序渐进,每一章都建立在前一章之上,同时提供必要的实用案例和理论解释。
现有的参考文档解决了 如何 使用这些功能,我们希望这本书解决的是 为什么 和 什么时候 使用这些功能。
本书的初始印刷版针对的是 Elasticsearch 1.4.0,不过我们一直在不断更新内容和完善示例 本书的线上版本 针对的是 Elasticsearch 2.x。
你可以访问这本书的 GitHub 仓库 来追踪最新变化。
Elasticsearch 做了很多努力和尝试来让复杂的事情变得简单,很大程度上来说 Elasticsearch 的成功来源于此。 换句话说,搜索以及分布式系统是非常复杂的,不过迟早你也需要掌握一些来充分利用 Elasticsearch。
恩,是有点复杂,但不是魔法。我们倾向于认为复杂系统如同神奇的黑盒子,能响应外部的咒语,但是通常里面的工作逻辑很简单。 理解了这些逻辑过程你就能驱散魔法,理解内在能够让你更加明确和清晰,而不是寄托于黑盒子做你想要做的。
这本权威指南不仅帮助你学习 Elasticsearch,而且带你接触更深入、更有趣的话题,如 [distributed-cluster] 、 [distributed-docs] 、 [distributed-search] 和 [inside-a-shard] ,这些虽然不是必要的阅读却能让你深入理解其内在机制。
本书的第一部分应该是在按章节顺序阅读,因为每一章建立在上一章的基础上(尽管你也可以浏览刚才提到的章节)。 后续各章节如 [proximity-matching] 和 [partial-matching] 相对独立,你可以根据需要选择性参阅。
这本书分为七个部分:
-
章节 1 到 11 主要是介绍 Elasticsearch。介绍了 Elasticsearch 的数据输入输出以及 Elasticsearch 如何处理你的文档数据。 如何进行基本的搜索操作和管理你的索引。 本章结束你将学会如何将 Elasticsearch 与你的应用程序进行集成。 章节:2、 4、 9 和 11 为附加章节,目的是让你了解分布式处理的过程,不是必读的
-
章节 12 到 17 让你深入了解搜索,如何索引和查询你的数据,并借助一些更高级的特性,如邻近词(word proximity)和部分匹配(partial matching) 。你将了解相关度评分是如何工作的以及如何控制它来确保第一页总是返回最佳的搜索结果。
-
章节 18 到 24 解决如何有效使用分析器和查询来处理语言的头痛问题。我们会从一个简单的语言分析下手,然后逐步深入,如字母表和排序,还会涉及到词干提取、停用词、同义词和模糊匹配。
-
章节 36 到 39 介绍 Elasticsearch 支持的两种地理位置检索方式:经纬坐标点和复杂的地理形状(geo-shapes)。
-
章节 40 到 43 谈到了如何为你的数据建模来高效使用 Elasticsearch。在关系数据库里表达实体间的关系很容易,因为关系数据库就是为此而设计的,但是在搜索引擎里表达实体间的关系就没有那么容易了。这些章节会阐述如何设计索引来匹配你系统中的数据流。
因为本书侧重如何在 Elasticsearch 里解决实际问题,而不是语法介绍,所以有时候你需要访问 Elasticsearch 参考手册 来获取详细说明。 你可以访问以下网址获取最新的 Elasticsearch 参考手册和相关文档: https://www.elastic.co/guide/
如果你遇到本书或者参考手册没有收录到的问题,我们建议你访问 Elasticsearch 讨论社区来提问,学习别人是如何使用 Elasticsearch 的或者分享你自己的经验:
以下是本书中使用的印刷规范:
- 斜体
-
表示重点、新的术语或概念。
- 等宽字体
-
用于程序列表以及在段落中引用变量或程序元素如:函数名称、数据库、数据类型、环境变量、语句和关键字。
Tip
|
这个图标代表小贴士,建议。 |
Note
|
这个图标代表一般注意事项。 |
Warning
|
这个图标代表警告。 |
本书的目的是为了帮你尽快能完成工作。一般来说,本书提供的示例代码你都可以用于你的程序或文档。 你不需要联系我们来询问许可,除非你打算复用相当大一部分代码。比如,写一个程序用了一段本书的代码不需要许可,但是销售或者是发行一张包含所有 O’Reilly 图书的示例代码的 CD 这个就需要许可。 引用这本书、引用示例代码来回答问题不需要许可,将大量的示例代码从这本书中包含到您的产品的文档中,这个需要许可。
关于署名出处,我们欣赏但不是必须。一个出处通常包含:书名、作者、出版商和 ISBN。如: Elasticsearch: The Definitive Guide by Clinton Gormley and Zachary Tong (O’Reilly). Copyright 2015 Elasticsearch BV, 978-1-449-35854-9。
如果你觉得你的示例代码使用超出合理使用或上面给出的许可,可随时与我们联系 [email protected]。
Note
|
Safari Books Online is an on-demand digital library that delivers expert content in both book and video form from the world’s leading authors in technology and business. |
技术专家、软件开发人员、网页设计师和商业创意专家使用Safari在线图书作为他们的主要研究资源,用于解决问题、学习和认证培训。
Safari Books Online offers a range of plans and pricing for enterprise, government, education, and individuals.
Members have access to thousands of books, training videos, and prepublication manuscripts in one fully searchable database from publishers like O’Reilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology, and hundreds more. For more information about Safari Books Online, please visit us online.
有关本书的反馈、评论和问题请寄给这本书的出版商:
- O’Reilly Media, Inc.
- 1005 Gravenstein Highway North
- Sebastopol, CA 95472
- 800-998-9938 (in the United States or Canada)
- 707-829-0515 (international or local)
- 707-829-0104 (fax)
我们有这本书的网页,我们会列出勘误表、例子和任何额外的信息。你可以访问这个链接:http://oreil.ly/1ylQuK6[].
有关本书的反馈和技术问题,请发邮件 [email protected]。
了解我们的更多图书信息、课程、会议和新闻请访问我们的网站:http://www.oreilly.com[]。
我们的 Facebook 主页: http://facebook.com/oreilly
关注我们的 Twitter: http://twitter.com/oreillymedia
查看我们的 YouTube: http://www.youtube.com/oreillymedia
为什么配偶总是被放到最后一个?但并非是说最不重要! 在我们心中毫无疑问,有两个最值得我们感谢的人,他们是 Clinton 长期受苦的老婆和 Zach 的未婚妻。 他们照顾着我们和爱着我们,毫不懈怠,忍受我们的缺席和我们没完没了的抱怨这本书还要多久完成,最重要的是,她们依然还在我们身边。
感谢 Shay Banon 在最开始创建了 Elasticsearch,感谢 Elastic 公司支持本书的工作。 也非常感谢 Elastic 所有的同事,他们帮助我们透彻的了解 Elasticsearch 内部如何工作并且一直负责添加完善和修复与他们相关的部分。
其中两位同事特别值得一提:
-
Robert Muir 耐心地分享了他的真知灼见,特别是 Lucene 搜索方面。有几章段落就是直接出自其智慧珠玑。
-
Adrien Grand 深入到代码中回答问题,并检查我们的解释,以确保他们合理。
感谢 O’Reilly 承担这个项目和我们一起工作使这本书免费在线阅读,还有一直温柔哄骗我们的编辑 Brian Anderson 和善良而温柔的评论者 Benjamin Devèze、Ivan Brusic 和 Leo Lapworth。你们的鼓励,让我们充满希望。
感谢我们的读者,其中一些我们只有通过各自的 GitHub 才知道他们的身份,他们花时间报告问题、提供修正或提出改进建议:
Adam Canady, Adam Gray, Alexander Kahn, Alexander Reelsen, Alaattin Kahramanlar, Ambrose Ludd, Anna Beyer, Andrew Bramble, Baptiste Cabarrou, Bart Vandewoestyne, Bertrand Dechoux, Brian Wong, Brooke Babcock, Charles Mims, Chris Earle, Chris Gilmore, Christian Burgas, Colin Goodheart-Smithe, Corey Wright, Daniel Wiesmann, David Pilato, Duncan Angus Wilkie, Florian Hopf, Gavin Foo, Gilbert Chang, Grégoire Seux, Gustavo Alberola, Igal Sapir, Iskren Ivov Chernev, Itamar Syn-Hershko, Jan Forrest, Jānis Peisenieks, Japheth Thomson, Jeff Myers, Jeff Patti, Jeremy Falling, Jeremy Nguyen, J.R. Heard, Joe Fleming, Jonathan Page, Joshua Gourneau, Josh Schneier, Jun Ohtani, Keiji Yoshida, Kieren Johnstone, Kim Laplume, Kurt Hurtado, Laszlo Balogh, londocr, losar, Lucian Precup, Lukáš Vlček, Malibu Carl, Margirier Laurent, Martijn Dwars, Matt Ruzicka, Mattias Pfeiffer, Mehdy Amazigh, mhemani, Michael Bonfils, Michael Bruns, Michael Salmon, Michael Scharf , Mitar Milutinović, Mustafa K. Isik, Nathan Peck, Patrick Peschlow, Paul Schwarz, Pieter Coucke, Raphaël Flores, Robert Muir, Ruslan Zavacky, Sanglarsh Boudhh, Santiago Gaviria, Scott Wilkerson, Sebastian Kurfürst, Sergii Golubev, Serkan Kucukbay, Thierry Jossermoz, Thomas Cucchietti, Tom Christie, Ulf Reimers, Venkat Somula, Wei Zhu, Will Kahn-Greene 和 Yuri Bakumenko。
感谢所有参与本书的中文译者与审校人员,他们牺牲了大量宝贵的休息时间,他们对翻译内容仔细斟酌,一丝不苟, 对修改意见认真对待,各抒己见,不厌其烦的进行修改与再次审校,这些默默奉献的可爱的人分别是: 薛杰,http://github.com/luotitan[骆朗],http://github.com/pengqiuyuan[彭秋源],http://github.com/richardwei2008[魏喆],http://github.com/chenryn[饶琛琳], 风虎,http://github.com/looly[路小磊],http://github.com/michealzh[michealzh],http://github.com/node[nodexy],http://github.com/sdlyjzh[sdlyjzh],http://github.com/wharstr9027[落英流离], sunyonggang,http://github.com/zhaochenxiao90[Singham],http://github.com/Josephjin[烧碱],http://github.com/lephix[龙翔],http://github.com/lephix[陈思],http://github.com/blogsit[陈华], 追风侃侃,http://github.com/Geolem[Geolem],http://github.com/JessicaWon[卷发],http://github.com/kfypmqqw[kfypmqqw],http://github.com/weiqiangyuan[袁伟强],http://github.com/yichao2015[yichao], 小彬,http://github.com/leo650[leo],http://github.com/tangmisi[tangmisi],http://github.com/cdma[Alex],http://github.com/abia321[baifan],http://github.com/EvanYellow[Evan],http://github.com/fanyer[fanyer], wwb,http://github.com/luoruixing[瑞星],http://github.com/Miranda21[刘碧琴],http://github.com/weikuo0506[walker],http://github.com/javasgl[songgl], 吕兵,http://github.com/kankedong[东],http://github.com/smilesfc[杜宁],http://github.com/qindongliang[秦东亮],http://github.com/biyuhao[biyuhao],http://github.com/LiuGangR[刘刚], yumo,http://github.com/wangxiuwen[王秀文],http://github.com/zcola[zcola],http://github.com/gitqh[gitqh],http://github.com/blackoon[blackoon],http://github.com/davidmr_001[David],http://github.com/stromdush[韩炳辰], 韩陆,http://github.com/echolihao[echolihao],http://github.com/cch123[Xargin],http://github.com/sunzhenya[abel-sun],http://github.com/AlixMu[卞顺强], bsll,http://github.com/donglangdtstack[冬狼],http://github.com/destinyfortune[王琦],http://github.com/medcl[Medcl]。