书名:Elasticsearch实战(第2版)
ISBN:978-7-115-65445-8
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [英]马杜苏丹·孔达 (Madhusudhan Konda)
译 程治玮 王晓辉
责任编辑 杨海玲
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Original English language edition, entitled Elasticsearch in Action, Second Edition by Madhusudhan Konda published by Manning Publications Co., 209 Bruce Park Avenue, Greenwich, CT 06830. Copyright ©2023 by Manning Publications Co. This translation is published and sold by permission of Manning Publications, the owner of all rights to publish and sell the same.
Simplified Chinese-language edition copyright ©2025 by Posts & Telecom Press. All rights reserved.
本书中文简体字版由Manning Publications Co.授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
版权所有,侵权必究。
本书全面深入地介绍Elasticsearch的核心功能及其工作机制。本书由浅入深,从Elasticsearch的基本用法和架构原理,以及倒排索引、分片、节点角色和相关性等核心概念讲起;然后深入探讨数据处理和索引管理,涵盖映射模式、数据类型、文本分析、索引模板;接着详细介绍词项级搜索、全文搜索、复合查询和高级搜索等Elasticsearch的搜索功能,并深入讲解聚合;最后聚焦生产环境中的Elasticsearch管理和性能优化。本书特别注重实践,提供了大量的代码示例,涵盖从基础查询到复杂功能的各种应用场景。与第1版相比,这一版更新并补充了许多新的功能点,如索引生命周期管理、可组合索引模板机制、地理位置查询等。
本书是使用Elasticsearch开发全功能搜索引擎的实践指南,适合刚接触Elasticsearch领域、希望了解其基本工作原理的开发者、架构师、分析师、管理者、产品负责人或希望利用Elasticsearch进行实时数据分析和处理的数据科学家阅读,也适合在实际项目中遇到挑战的资深工程师及学习大数据技术并对搜索技术感兴趣的学生和研究人员阅读。
对新手来说,Elasticsearch入门有一定门槛:一方面,只有了解全文检索领域的基础知识,理解分词、相关性分数、召回率等基础概念,才能根据业务需求设计合理的查询方式;另一方面,集群管理和调优需要具备较高的专业知识,管理数据分布和集群健康、排查慢查询和写入积压也需要对搜索原理有较深的理解。这本书不仅介绍了全文检索的基础知识,还比较全面地介绍了Elasticsearch中不同的查询方式,对集群管理也提供了初级指导,很适合作为入门读物。
——张超
《Elasticsearch源码解析与优化实战》作者、Apache Lucene Committer
Elasticsearch是一款入门相对简单,但想要精深却很难的搜索型数据产品。市面上有很多与Elasticsearch相关的书,侧重点有所不同。这本书主题鲜明,从应用开发者视角出发,结合一些场景案例,循序渐进地演示常用的搜索技术要点。这是一本不错的入门书,阅读过程中不会感觉枯燥,值得纳入囊中。
——李猛
Elastic Stack实战专家、阿里云MVP
从基础入门到高级搜索技巧,再到集群管理和性能优化,这本书不仅对Elasticsearch提供了全面的概述和实践指导,而且为构建高效、可靠的搜索解决方案提供了宝贵的经验。无论是新手还是资深开发者,都能在这本书中找到提升搜索体验的秘诀。
——杨昌玉(铭毅天下Elasticsearch)
《一本书讲透Elasticsearch:原理、进阶与工程实践》作者、Elastic认证专家、阿里云MVP
获悉《Elasticsearch实战》第2版的中文版翻译完成,我非常欣喜,个中缘由颇多:对搜索引擎技术领域而言,Elasticsearch的流行和其生态的持续繁荣着实让人感叹,它不仅让搜索引擎开发成为几乎每个开发人员的必备技能,而且大大降低了上手门槛;同时,Elasticsearch的持续迭代和进化,让人工智能技术在搜索领域的应用更加普及。这本书译者的工作让这种普及程度进一步提升,衷心推荐读者阅读这本书。
——杨振涛
vivo互联网研发总监、曾任Elastic中文社区深圳区负责人
久负盛名的Manning的“实战”(in Action)系列书一直都是程序员掌握某个技术栈非常好的入门实战指南。这个系列的书在内容选择上,不会一下子进入非常深的主题,而是优先讲透对实战必不可少的知识点。《Elasticsearch实战》是帮助广大Elasticsearch开发者从入门到实际写出一个完整程序必不可少的参考书,这本书是其第 2 版的中文版,这一版的出版对国内广大的Elasticsearch开发者是一个福音。技术书的翻译需要译者对相关技术有非常深刻的理解和实战经验,这本书的两位译者长期从事Elasticsearch的应用开发工作,不但有深厚的技术功底,还有非常好的英文翻译功底。我试读这本书时感觉其文字流畅易懂,专业术语的翻译也精准到位。我非常推荐广大Elasticsearch开发者阅读这本书。
——朱杰
Elastic首席解决方案架构师
《Elasticsearch实战》一直是众多开发者学习Elasticsearch的经典入门书,这本书内容翔实,实际案例丰富,帮助许多人快速掌握了这项强大的技术。如今,为了将这本优秀的著作的第2版带给中文读者,两位译者付出了大量心血,感谢他们的辛勤工作。《Elasticsearch实战》第2版的中文版的问世令人欣喜,相信它能够帮助更多人轻松上手Elasticsearch,并在实践中充分发挥其强大的功能。
——魏彬
中国首位Elastic认证工程师
这本书对如何发挥Elasticsearch的全部潜力做了出色的深入介绍。
——Paul Stadig
Elasticsearch是一个复杂的话题,而这本书是最好的资源。我强烈推荐!
——Daniel Beck
juris GmbH
当你开始使用Elasticsearch时,这是一本非常好的书。
——Tanguy Leroux
Elastic公司软件工程师
这是我找到的最好的Elasticsearch图书。我无须再找了。
——Koray Güclü
这本书将成为你应对半结构化数据挑战的必备指南。
——Artur Nowak
Evidence Prime公司CTO
现代大规模搜索系统的入门指南。
——Sen Xu
Twitter公司(现X公司)高级软件工程师
一周内让我从迷惑走向自信。
——Alan McCann
Givsum公司CTO
很荣幸能为本书写序。
这本书将揭开Elasticsearch的神秘面纱,带领读者走进搜索的世界。
在数字化时代,数据已成为企业最宝贵的资产之一。随着大数据技术的飞速发展,如何高效地存储、检索和分析海量数据,成为许多企业和开发者面临的挑战。在这一背景下,Elasticsearch以其卓越的搜索能力、灵活的数据索引能力和实时的数据处理能力,迅速成为大数据搜索和分析领域的明星产品。
Elasticsearch是一个基于Lucene的搜索引擎,具有分布式架构和RESTful Web接口,支持多用户的全文搜索。它不仅能处理结构化数据,还能高效地处理非结构化数据,如文本、图片、音频和视频等。它的流行,得益于其简单易用的特性和强大的社区支持。
对企业来说,Elasticsearch已经成为搜索基础设施的重要组成部分。基于Elasticsearch,企业可以轻松处理海量数据,实现高效的查询和分析。Elasticsearch 良好的分布式可扩展性使其能随着企业的成长而无缝扩展,无须担心因数据的急剧增长而需要对应用架构进行重大调整。此外,与其他技术栈相比,Elasticsearch 适用的场景更加广泛。通过一套技术栈,企业可以解决多种业务场景下的数据分析和处理需求,从而使技术团队能更好地聚焦业务,提高开发效率,降低维护成本。
Elasticsearch的灵活性和强大的功能使得它在各行业中得以广泛应用,不论是电商、金融、医疗还是物流,都能从中受益。它不仅支持结构化数据的高效处理,还能轻松应对非结构化数据的挑战,使数据的价值最大化。通过实时的数据处理和分析,企业能够快速响应市场变化,做出更明智的业务决策,提升竞争力。
此外,Elasticsearch的开源特性和活跃的社区生态,使企业不仅能以较低的成本享受前沿的搜索和数据处理技术,还能获得社区的帮助和资源。这不仅降低了技术投入的成本,还为企业提供了更多创新和优化的空间。通过不断优化和升级,Elasticsearch将持续满足企业不断变化的需求,为其数据战略提供坚实的支撑。
对开发者来说,学习Elasticsearch不仅是在追赶技术潮流,更是提升个人技术实力、解决实际问题的必要途径。在当前的技术发展态势下,掌握Elasticsearch意味着能够更有效地处理和分析大规模数据集,为业务决策提供强有力的数据支持。通过学习Elasticsearch,开发者能够掌握先进的数据处理和搜索技术,提升自己的竞争力。Elasticsearch的广泛应用和强大的社区支持为开发者提供了丰富的学习资源和实践机会,使他们能够不断提升自己的技能。通过对Elasticsearch的深入学习和实践应用,开发者将能够在大数据领域中游刃有余,成为真正的数据专家。
总的来说,《Elasticsearch实战》是一本全面介绍Elasticsearch的书,其内容结构清晰,语言通俗易懂,即使是没有搜索引擎背景的读者也能够轻松学习。本书从基础概念讲起,随着阅读的深入,读者将逐步构建起对Elasticsearch的全面认识,并逐步深入到高级特性和最佳实践,最终能够独立完成从数据索引到复杂查询的一系列操作。
对初学者来说,这本书是进入Elasticsearch世界的完美指南。书中不仅涵盖了Elasticsearch的核心概念和操作,还提供了大量的实例和案例分析,帮助读者理解如何在实际项目中应用Elasticsearch。这一版的内容也与时俱进,更新并补充了许多新的功能点,如索引生命周期管理、可组合索引模板机制等,使其更加丰富和实用。
常言道,理论和实践缺一不可。这本书正是理论与实践相结合的典范,希望它能成为你探索和掌握Elasticsearch的得力助手。
——Medcl
极限科技(INFINI Labs)创始人、Elasticsearch中文社区创始人
我们两个人与Elasticsearch的渊源颇深:一个是《Elasticsearch实战》的忠实读者,对这本书充满了感激之情,正是在这本书的第1版的引领下踏入了Elasticsearch的世界,并深入了解了这款强大工具的工作原理及其广泛的应用场景;另一个是在十多年前初次接触Elasticsearch时,便被它的易用性深深吸引,在为日益增长的海量数据寻找可扩展的搜索引擎的过程中,坚定地选择了Elasticsearch,并坚持使用至今。当得知有机会翻译《Elasticsearch实战》的第2版时,我们都备感兴奋,希望能通过我们的翻译将这本书的精髓传递给更多的中文读者。
Elasticsearch是一个开源的分布式搜索和分析引擎,它以强大的全文搜索能力、近实时的数据处理能力和出色的可扩展性,成为现代大数据处理和分析的核心工具之一。它广泛应用于日志分析、实时监控、信息检索、电子商务等领域。尤其是在大数据和人工智能快速发展的今天,Elasticsearch的作用愈发不可或缺。
第2版不仅保留了第1版的精华内容,还在多个方面进行了重要的更新和优化。书中全面深入地介绍了Elasticsearch的核心搜索功能,包括词项级搜索、全文搜索和聚合,并且详细阐述了其背后的工作机制;此外,书中还介绍了多种高级搜索功能,如地理查询、span
查询、more_like_this
查询等。这些功能在实际应用场景中非常有价值。为了帮助读者在生产环境中更好地配置和使用Elasticsearch,第2版提供了更多性能优化和集群管理的建议和技巧,对想要提高系统性能和稳定性的读者来说,这些内容非常有帮助。作者还特别注重实践,精心准备了大量的代码示例,涵盖从基础查询到复杂功能的各种应用场景。相信通过亲手实践这些示例,读者可以迅速掌握Elasticsearch的使用方法和最佳实践。
在翻译过程中,我们深刻体会到了技术翻译的挑战与乐趣,每个技术细节的翻译都是一次重新学习和理解的过程。面对Elasticsearch这样一款专业性很强的技术工具,我们努力确保翻译的准确性,并力求用简明易懂的语言帮助读者理解。这也让我们更加深刻地认识到,作为译者,我们不仅要传达原著的内容,还要成为读者与原著作者之间的桥梁。
在此,我们要感谢本书的原作者,感谢他以严谨的态度和丰富的经验,为读者呈现了这本内容翔实且极具价值的技术著作。我们还要特别感谢作为翻译搭档的彼此的辛勤付出,以及人民邮电出版社的杨海玲编辑在翻译过程中提供的宝贵意见。感谢所有参与本书中文版出版工作的人员。正是在大家的共同努力下,本书才得以最终呈现在读者面前。
作为本书的第一译者,我要感谢我的父母和妻子,为了完成本书的翻译,我陪伴你们的时间少了许多,是你们的理解和支持让我能够全身心投入这项工作。
作为本书的第二译者,我要感谢我的妻子蔺欣月对我翻译工作的支持,毫无疑问,你是我一路走来最大的助力。
愿本书能够帮助更多的读者深入理解和掌握Elasticsearch,成为你们在工作中不可或缺的参考书。无论是刚接触Elasticsearch的新手,还是在实际项目中遇到挑战的资深工程师,都会从本书中获得宝贵的指导和建议。
多年来,我一直是Manning的“实战”(in Action)系列书的忠实粉丝,这个系列的书在我的职业生涯中发挥了重要作用。我喜欢这些书专注于实用、有用和可实践的建议,内容涵盖了我在工作和开源项目中使用的各种技术。
正是本着同样的精神,多年前我开始开发Elasticsearch。当时我的妻子正在学习厨艺技能以期成为一名厨师,我想给她写一个食谱应用,由此我开始接触搜索。后来,我开源了自己写的代码,从而迈入了开源世界。我试图打造一个有用、实用且易于使用的搜索引擎——可以说,这就是搜索实战。
到了2023年,我很高兴看到Elasticsearch已经获得了广泛关注,并且在“实战”系列书中也有了相应的作品——你现在看到的就是。我相信你会喜欢阅读本书并学习Elasticsearch。本书作者对搜索和Elasticsearch都充满热情,这体现在这本书的深度和广度、热情的语气和可实践的示例中。
我希望在学习Elasticsearch之后,你能把学到的知识付诸实践。毕竟,搜索无处不在,存在于我们所做的一切之中,这也是多年前我爱上它的原因。
——Shay Banon
Elasticsearch创始人
20世纪90年代末,我正在印度理工学院克勒格布尔分校(Indian Institute of Technology Kharagpur)攻读硕士学位,同时沉浸在迷人的Java(准确地说是Java 1.0)编程世界中。那是一段孤独的旅程,尽管我对第一次使用面向对象编程语言感到高兴,但每次代码编译失败都意味着我与终端之间的一场较量。那时候还没有花哨的集成开发环境(IDE),我使用vi编辑器写代码,然后进行编译。(当时Sun Microsystems有一个称为Java WorkShop的基础IDE,但它也有些问题和缺陷。)与现在资源丰富的时代不同,当时没有像Google、Stack Overflow和GitHub这样的数字资源可以探索解决方案,或者了解其他程序员是否遇到过类似的问题。后来,我的好朋友、当时正在班加罗尔的印度科学学院(Indian Institute of Science)学习的Amar向我介绍了搜索领域的一个新事物——Google。
对于一个天真的年轻学生,与一群面临类似问题的程序员通过虚拟社区交流是一种新奇的体验。因此,我决定探索这个新的途径。我还记得当我浏览网页寻找答案时,被Google简洁的设计吸引,它只是在不刺眼的白色背景上点缀着原色。早期版本的搜索引擎远没有我们今天所熟知的复杂工具那么强大,但在那段充满挑战的时期,它就像一座鼓舞人心的灯塔。(任何经历过Java 1.x的人都能理解其中的艰辛。)那一刻标志着我人生旅程中的一个重要转折点。
尽管 Google 的搜索能力对许多人来说是革命性的,但在客户环境和组织内的采用却相对较慢。那时,在我参与的项目中,数据库充当了搜索应用的支柱。虽然功能齐全,但这些配置与我们现在认识的现代搜索引擎的功能相去甚远。它的搜索机制笨拙且难以运用,性能欠缺,维护上也存在挑战。然而,我对精简架构的偏爱从未动摇,它一直是我追求高效和有效解决方案的指路明灯。
我进入Elasticsearch世界的旅程始于2015年,恰逢大数据成为主流。那时我正在使用JBoss和WebLogic这样偏向单体架构的应用服务器巨兽来处理企业Java Beans(EJB),我立刻被Elasticsearch简洁的结构所吸引,尤其是其与编程语言无关的支持、开箱即用的功能、性能及出色的文档。我用了几年的时间才完全掌握Elasticsearch,并充分发挥它的全部潜力。
尽管Elasticsearch架构简单且功能强大,但我意识到它的学习曲线陡峭,需要有指导才能探索其错综复杂的内部机制和无数的功能。理解无数的功能和迷宫般的文档需要手把手的指导,这种认识促使我接触了Manning出版社的Andy Waldron。
写一本书往往需要熬夜、牺牲周末,假期还要在写字台前度过。如果没有家人们坚定的支持,这项艰巨的任务永远不可能完成。这是一段标志着持续专注和充满决心的两年旅程,最终将这本书交到你手中。
虽然我通常谦虚地看待自己的成就,但我不得不承认这个特定的项目倾注了我大量的心血,它值得我给自己一个赞扬。在过去的两年中,我从未有一天怀疑过自己,这本身就是一个值得庆祝的成就。
现在,对你阅读这本书,我表示深深的感激也感到欣喜。我感谢你的购买,并为你即将开始的Elasticsearch世界之旅感到兴奋。
随着过去 10 多年大数据和云计算以前所未有的势头增长,Elasticsearch 的能力在深度与广度上也得到了显著增强。它的适用场景不断扩大,反映了这些日新月异的技术环境中的需求和机遇的演变。它的高级功能,包括多语言分析器、地理空间和时间序列存储、基于机器学习算法的异常检测、图形分析、自动补全和模糊搜索、基于日志存储定位问题、丰富的数据可视化、复杂的聚合分析等,都使Elasticsearch成为大多数组织和企业必不可少的工具。
我衷心希望你阅读这本书的乐趣不亚于我撰写它的乐趣!
一本书永远不会凭空而来!它是奉献的产物,是精心规划、坚定专注和不懈努力的结果。这个过程是一次集体努力的成果,包括我的家人无尽的爱和支持,Manning团队的专业协作,朋友和同事的鼓励,当然,最重要的是像你这样的读者持续的关注和支持。我们共同努力了两年,专注且坚定,热情且全神贯注,只为一个目标:创作出《Elasticsearch实战(第2版)》。我们做到了!
我必须衷心感谢我的妻子Jeannette D’Souza,她在我写书的过程中一直支持我。在一个个漫长的夜晚和艰难的时刻,她无尽的耐心、理解和鼓励一直是我坚定的灯塔。她不仅是伴侣,更是我力量和韧性的支柱,因为她,这个艰巨的过程变成了一段充满爱和决心的旅程。为此,也为了她所做的一切,我永远感激她。
同样,我要向我的儿子 Josh 表示诚挚的谢意,他的爱和无条件、毫不怀疑的支持在这段充满挑战的日子里一直是我的力量源泉。他的理解(当我错过陪伴他的夏天和假期时)和鼓励使本书得以面世。
我要深深感谢我的母亲,她在这个过程中与我同住了半年。她的关怀体现在每个充满爱的小举动上,从早上泡咖啡到准备丰盛的早餐、美味的小吃和令人愉悦的零食。她的支持确实是慰藉和力量的源泉。
我要衷心感谢我的两个兄弟、侄女和其他家庭成员。尽管写作任务让我们的交流变得不那么频繁,但他们的理解和支持仍然给予了我力量。他们持续的鼓励是推动我努力的动力,使我的创造力引擎保持平稳运行。
我必须对Venkat Subramaniam表达最深切的感激。作为作家,他崇高的声望只能被他乐于助人的品格所超越。他慷慨分享了自己的智慧,为我早期的章节提供了非常宝贵的意见,这些意见真正帮助我与读者建立了联系。不管他的日程有多忙,Venkat总是能找到时间来帮助我。他的支持是至关重要的,对此,我感激不尽。
如果没有Manning的编辑Andy Waldron宝贵的指导和毫不动摇的支持,本书就永远不可能从概念变为现实。他的专业和鼓励对本书的出版起了决定性作用。
我要特别感谢本书的策划编辑Ian Hough,他的耐心和编辑才能非常出色。他能够有策略地制订每章的计划,确保我能按部就班地完成计划,这对塑造本书至关重要。即使偶有延期,他的理解也值得称赞。他的贡献确实是无价的。
本书的文字编辑Frances Buran在书中的每部分都施展了魔法。在她的不懈努力下,我的写作质量有很大的提高,确保我的非母语表达在书中流畅自然。
衷心且特别感谢校对编辑Tiffany Taylor,她在语言上的专业知识对确保全书的语法准确性和连贯性至关重要。她的细致努力显著提高了这本书的表达清晰度和可读性。她敏锐地找出了我犯的那些愚蠢和尴尬的错误,高效且有效地完成了最后的编辑工作。
我要真诚地感谢Manning团队的Melena Selic、Marina Matesic、Rebecca Rinehart、Aria Ducic和Susan Honeywell,感谢他们让本书成为如此高质量的作品。没有他们的帮助和指导,本书不可能完成。我还要感谢Manning的制作团队为创建本书付出的辛勤工作。
我要感谢本书的技术编辑Al Krinker,他以全新的眼光和视角审阅了各章。Al几乎是拿到每章书稿就立刻投入其中,因此我能够在对章节印象还很深刻时就看到他的反馈。
我还要感谢Simon Hewitt和Simone Cafiero及时的技术反馈,以及对代码的检查和测试。他们的意见非常宝贵。
我也要感谢一些朋友和同事:Herodotos Koukkides、Semi、Jason Dynes和George Theofanous。还有一些人我无法一一点名,但他们在我完成此书的过程中发挥了重要作用!衷心感谢你们!
如果要我说出最让我感激的一群人,毫无疑问就是本书的审稿人和读者。他们在提高本书的质量方面发挥了关键作用。我要向以下审稿人表示最诚挚的谢意:Adam Wan、Alan Moffet、Alessandro Campeis、Andrei Mihai、Andres Sacco、Bruno Sonnino、Dainius Jocas、Dan Kacenjar、Edward Ribeiro、Fernando Bernardino、Frans Oilinki、George Onofrei、Giampiero Granatella、Giovanni Costagliola、Hugo Figueiredo、Jaume López、Jim Amrhein、Kent Spillner、Manuel R. Ciosici、Milorad Imbra、Dale S. Francis、Muneeb Shaikh、Paul Grebenc、Raymond Cheung、Richard Vaughan、Sai Gummaluri、Sayeef Rahim、Sergio Fernandez Gonzalez、Simone Cafiero、Simone Sguazza、Srihari Sridharan、Sumit K. Singh、Vittorio Marino 和 William Jamir Silva。他们宝贵的反馈对完成本书起到了重要的作用。他们的见解和观点是绝对不可或缺的。
对于任何希望深入了解Elasticsearch和实际使用它的人,本书都是一份宝贵的资源。特别是以下人士,将从阅读本书中受益:
❏ 刚接触Elasticsearch领域、希望了解其基本工作原理的开发者、架构师、分析师、管理者或产品负责人;
❏ 希望在数据管道中利用Elasticsearch进行实时数据分析和处理的数据科学家;
❏ 维护大型数据库,希望使用Elasticsearch提高数据检索效率和整体系统性能的系统管理员;
❏ 需要了解Elasticsearch以便在客户项目中推荐使用和做出战略性IT决策的IT顾问或技术顾问;
❏ 熟悉技术且想了解Elasticsearch如何提高运营效率或为客户提供额外价值的企业管理者;
❏ 在计算机科学、数据科学或相关领域学习大数据技术,并对学习搜索技术感兴趣的学生和学术研究人员;
❏ 处理大数据集,渴望使用Elasticsearch增强搜索功能(包括全文搜索、模糊搜索、词项级搜索和其他复杂搜索功能)的个人用户;
❏ 目标是设计和开发与Elasticsearch集群通信的微服务的Elasticsearch架构师、开发者或分析师。
尽管本书没有划分部分,但各章遵循清晰的线性进展,先从特性和架构的角度开始介绍Elasticsearch。
❏ 第1章开启搜索世界的旅程,回顾从基本的数据库支持系统到今天普遍使用的高级搜索引擎的发展历程。聚焦于Elasticsearch这一强大、多功能的现代搜索引擎,它重新定义了搜索功能的能力,将其独特的特性、实际的应用和广泛的采用推向了前沿。这一章还展望通用人工智能工具的变革潜力,探讨像ChatGPT这样的技术带来的令人兴奋的可能性,探索它们将来如何重塑搜索空间,并在未来重新定义人类与信息的交互方式。
❏ 第2章深入了解Elasticsearch实践,通过使用文档API进行索引和检索文档,学习使用搜索API执行搜索查询。这一章带领读者了解从模式匹配到短语搜索、拼写纠正、范围结果、多字段搜索等基本的搜索条件,还会涉及一点高级查询以进一步丰富学习体验。这一章最后介绍数据排序、结果分页、高亮显示和其他出色的提升用户搜索能力的功能。
❏ 第3章揭开Elasticsearch架构的神秘面纱,引导读者了解它的基础组件和实现搜索与索引的复杂过程。这次探索涵盖驱动搜索引擎的基本概念,包括倒排索引、相关性和文本分析。这一章还探讨Elasticsearch服务器的集群和分布式特性。
❏ 第4章探索映射模式、数据类型和映射API,并详细介绍Elasticsearch数据处理的方式。这一章讨论映射模式如何提高搜索的准确性和效率,深入研究动态和显式映射。这一探索还扩展到核心数据类型,包括text
、keyword
、date
和integer
。这一章最后介绍高级数据类型,如geo_point
、geo_shape
、object
、join
、flattened
等。
❏ 第5章全面讨论单文档API和多文档API及其相关操作。这一章不但从实践的角度理解使用这些API来索引、检索、更新和删除文档,而且探讨重新索引功能。
❏ 第6章聚焦使用索引API进行索引操作。这一章指导读者了解索引的基础配置,包括设置、映射和别名。这次探索提供了对为生产场景自定义索引的一种理解。这一章还讨论如何处理索引模板,探讨索引和可组合模板的机制。最后一节研究索引生命周期管理。
❏ 第7章深入文本分析,审视Elasticsearch的分析器模块是如何对全文进行分词和归一化处理的。这一章介绍文本分析的机制,探索内置分析器,如standard
分析器、simple
分析器、keyword
分析器和语言分析器。这一章会让读者掌握创建自定义分析器的知识。
第8章到第13章专注于搜索。
❏ 第8章为理解搜索的基本原理打下基础,解释搜索请求的处理和响应生成的机制。这一章介绍两种主要的搜索类型,即URI搜索和Query DSL,还介绍一些通用的功能,如高亮显示、排序、分页等,为读者提供Elasticsearch搜索功能的全面介绍。
❏ 第9章探讨面向结构化数据的词项级查询,详细讨论各种类型的词项级查询,包括范围(range
)查询、前缀(prefix
)查询、通配符(wildcard
)查询和模糊(fuzzy
)查询等。
❏ 第10章着眼于专为搜索非结构化数据而设计的全文查询。这一章介绍使用全文搜索API的多种方式,包括match
系列查询、query_string
查询、fuzzy
查询和simple_ query_string
查询等。
❏ 第11章进入复合查询的复杂世界,重点介绍布尔查询作为构建高级搜索查询的多功能工具。这一章讨论如何使用条件子句(如must
、must_not
、should
和filter
)将子查询构造成更复杂的复合查询。这一章最后详细介绍boosting
查询和constant_score
查询。
❏ 第12章介绍专用查询,包括distance_feature
、percolator
、more_like_this
和pinned
。这一章介绍每类查询的独特优势,如distance_feature
查询能够优先返回接近给定位置的结果,more_like_this
查询可以查找类似的文档。这一章还详细介绍percolator
查询,当有新的文档满足条件时,该查询可以通知用户。
❏ 第13章详细介绍聚合。这一章探讨指标聚合,如求和、平均值、最小值、最大值、排行(top_hits)等统计数据,还强调在收集聚合数据到一组桶中时使用桶聚合的方法。这一章还研究管道聚合,它提供诸如导数和移动平均等高级统计分析。
最后两章集中介绍管理和性能。
❏ 第14章介绍生产环境的Elasticsearch管理知识。这包括了解如何在不同负载下扩展集群、节点间通信和如何确定分片大小。这一章还探讨快照的核心概念,提供创建快照和在需要时从中检索数据的实际示例,详细介绍高级配置和集群主节点的概念。
❏ 第15章深入探讨如何对性能不佳或问题频繁的Elasticsearch集群进行故障排除。这一章介绍出现故障的常见原因,如搜索和速度瓶颈、不稳定和不健康的集群及断路器等,还提供诊断和解决性能问题的知识,确保用户的Elasticsearch集群平稳高效地运行。
本书还包含3个附录。
❏ 附录A是在本地环境中安装Elasticsearch和Kibana的实用指南。
❏ 附录B介绍摄取管道,这是Elasticsearch中数据预处理的一个关键组件,以及如何在各种场景中配置和使用它们。
❏ 附录C涵盖使用Java客户端与Elasticsearch进行交互的方法,并提供示例和最佳实践。
本书的主要目标之一是通过包含易于执行的代码来提供无缝的实践体验。经过数次迭代,目前所有在Kibana上编写和执行的查询托管在GitHub上的文本文件中。这些查询是基于Query DSL的JSON代码。这样做的目标是提供一个简单明了的过程,让读者可以从GitHub复制这些文本文件,并将其粘贴到Kibana Dev Tools应用中立即执行。
为了进一步帮助读者学习,我在专门的数据集文件夹中提供了样本数据文件和这些索引的映射(必要时)。这种方法确保了一种实用的、对学习者友好的体验,让读者可以直接使用数据并运用新掌握的知识。
本书的所有源代码均可从本书的GitHub代码库和出版社网站下载。文件夹内容如下。
❏ kibana_scripts——每章的Query DSL脚本。
❏ datasets——各章所需的映射和样本数据集。
❏ code——Java和Python代码。
❏ docker——在本地环境中运行服务的Docker文件。例如,Elasticsearch-docker-8-6-2.yml包含了两个服务,即Elasticsearch和Kibana。因此,当执行docker-compose up
命令时,它会在Docker容器中启动Elasticsearch和Kibana服务。
❏ appendices——鉴于Elasticsearch的快速迭代,本书也需要进行更新。新特性将在这个文件夹(或本书的GitHub代码库)中提供。我会根据Elasticsearch的新版本添加和修改内容。
Elasticsearch的版本发布频率相当高——当我开始撰写本书时,我使用的是7.x版本,而当本书准备付印时,版本已经是8.7了。等到你读到本书的时候,我预计Elastic还会有更多的版本发布!每次新版本发布,更新代码库都是一项艰巨的任务。我会努力保持代码的更新,但我也非常欢迎贡献者来维护代码库。如果你想成为这个项目的贡献者,请联系我。
本书列出了许多源代码示例,以带编号的代码清单和行内普通文本的形式出现。源代码都使用等宽字体,以便与普通文本区分开。
大多数时候,原始源代码已经做了重新格式化,我们添加了换行符并调整了缩进以适应书的页面宽度,但在极少数情况下,这样还不够,代码清单中会包含续行标记(➥)。此外,当源代码在正文中已经有描述时,源代码中的注释通常会被删掉。许多代码清单中都附加了代码注释,以强调一些重要概念。
马杜苏丹·孔达(Madhusudhan Konda)是一位经验丰富的技术专家,他始终致力于简化复杂问题、掌握全局视角,并在编程语言和高级框架的新领域有很深入的研究。他对技术的热衷不只是因为职业,还因为他将其作为一次终身探索和学习的旅程。他擅长将复杂的问题转化为简单、容易管理的解决方案,在不断演进的技术领域中提供清晰的指引。
在 25 年的职业生涯中,马杜苏丹曾担任过许多角色,包括解决方案架构师、首席/高级工程师等。然而,在他的各种角色中始终贯穿着一种热切的愿望,那就是分享知识并培育同事对编程语言、框架和新兴技术的理解。
马杜苏丹的专业知识在为从瑞士信贷、瑞银集团、日本瑞穗银行、德意志银行和哈利法克斯银行这样的银行到英国石油和英国航空这样的能源和航空领域的领导者等众多客户构建和交付高质量的解决方案中发挥了重要作用。
他的专长不仅限于领导和交付从零开始的软件项目,以及为复杂商业问题构建解决方案。马杜苏丹是一位战略家和远见者,以擅长制定战略路线图、成本效益架构和产品设计方案而著称。他的领导风格兼具指导教育和思想引领,不断突破极限,并激励团队发掘自身的潜力。他为自己能够教育和培训不同水平的人——从新手到资深专家,以及指导和引导初级员工而感到自豪。
除了令人印象深刻的职业生涯,马杜苏丹还是一位颇具盛名的技术图书作者。他关于Java、Spring和Hibernate生态系统的书及视频课广受欢迎,这进一步凸显了他在技术界培养学习和探索文化的承诺。他是一位充满热情的博客作者,总是努力撰写富有洞察力的文章,不仅仅局限于技术领域,还深入工程师软技能这一关键领域。
在追求清晰和简洁的过程中,马杜苏丹不断努力将复杂的技术概念转化为易于理解的内容。他的理念集中在将复杂的思想简化到甚至一个10岁的孩子都能理解的程度,从而使高级技术对所有人都易于接近和理解。
本书封面上的插图标题为“来自克罗地亚的男人”(A Man from Croatia)。该插图取自19世纪中叶Nikola Arsenovic的一本克罗地亚传统服饰图集。
在那个时代,仅凭借衣着就可以很容易辨别出一个人的居住地、职业或社会地位。Manning出版社基于近几个世纪前丰富多彩的地域文化来设计图书封面,以此来赞扬计算机行业的创造性和主动性,正如本书的封面一样,这些图片把我们带回到过去的生活中。
本章内容
❏ 描述现代搜索引擎的背景
❏ 介绍Elasticsearch
❏ 理解Elasticsearch的核心领域、使用场景和突出特性
❏ Elastic Stack:Beats、Logstash、Elasticsearch和Kibana
近年来数据的爆炸性增长导致大家对搜索和分析功能的标准有了新的预期。随着组织积累的数据量的增长,“大海捞针”的能力变得至关重要。除了搜索能力,能够使用分析功能对数据进行汇总和聚合也已经成为组织的硬性要求。在过去 10 年中,现代搜索和分析引擎的采用呈指数级增长。Elasticsearch就是这样一个现代搜索引擎。
Elasticsearch是一个强大且流行的开源分布式搜索和分析引擎。它是在Apache Lucene库的基础上构建的,可以对结构化和非结构化数据进行近实时的搜索和分析。它旨在高效处理大量数据。
Elasticsearch在帮助组织利用其在搜索和分析领域的强大功能方面取得了长足的进步。除了搜索和分析的使用场景,它还用于应用和基础设施日志分析、企业安全和威胁检测、应用性能监控、分布式数据存储等领域。
在本章中我们会考察搜索领域的概况,并简要介绍搜索的演进历程,从传统数据库支持的搜索到当今的现代搜索引擎及其众多方便的功能;此外,我们还会介绍Elasticsearch,一款超快的开源搜索引擎,探讨其功能、使用场景和客户采用情况。
我们将快速了解生成式人工智能(generative artificial intelligence,简称生成式AI)工具是如何开始颠覆搜索领域的。随着ChatGPT的出现,一场拥抱人工智能并成为搜索领域领导者的竞赛已经开始。我会专门用一节来介绍当前的参与者,并探索由人工智能引领的搜索引擎的未来。
让我们花点儿时间思考一下,在日常体验中,什么样的搜索引擎可以称得上是“好的搜索引擎”。为了更好地理解这一点,我分享一次我使用糟糕的搜索引擎的经历。
最近,我家领养了一只小狗,名叫Milly(就是照片里的这只)。因为是第一次养狗,所以我开始在网上搜索狗粮。我浏览了我喜欢的超市网站,但令我失望的是,搜索结果并不是我想要的。结果列表包括“便便袋”(搜索狗粮时最不想看到的东西)和其他不相关的产品。该网站也没有筛选、下拉列表或价格范围选择等功能,它只是一个展示搜索结果的简单页面,并且启用了不太灵活的分页功能。
我对当前超市网站的搜索并不满意(受好奇心的驱使,我渴望了解其他搜索引擎是如何实现的),于是将搜索范围扩大到了其他超市网站。有一个网站展示了宠物背带,而其他网站的结果也参差不齐,其中一次搜索甚至向我展示了婴儿的午餐盒!
我不仅从搜索中得到了糟糕的结果,而且这些超市网站背后的搜索引擎在我输入时也没有提供建议,在我把“dog food”(狗粮)错拼成“dig fod”时,它们也没有纠正我的输入错误(我们被Google惯坏了,我们期望每个搜索引擎都有类似Google的建议和自动纠错的功能)。它们中的大部分并没有提供替代品或者类似物品的建议。有些结果并不相关(即并不是基于相关性的——但是这是可以接受的,因为并不是所有的搜索引擎都能保证提供相关的结果)。有一个超市网站甚至为一个简单的搜索请求返回了整整2400个结果!
由于对各大超市网站的搜索结果并不满意,我转向了亚马逊这个流行的在线购物网站,在这里我遇到了一个“好的搜索引擎”。当我刚输入“dog f ”时,一个下拉列表就向我展示了建议(见右图)。默认情况下,亚马逊的初始搜索会返回相关的(与我正在搜索的内容非常接近的)结果。如果需要,用户可以使用“按特征排序”选项来更改排序顺序(如价格从低到高或从高到低等)。一旦完成初始搜索,用户还可以通过选择品类、顾客平均评价、价格范围等条件来进一步探索其他类别。我甚至尝试了一个错误的拼写“dig food”,亚马逊问我是否指“dog food”。很聪明,对吧?
在当前的数字世界中,大家都很关注搜索。组织往往会毫不犹豫地采用搜索技术,因为它们清楚搜索引擎所能提供的商业价值,以及它可以解决的各种问题。下面我们就探讨一下搜索引擎的指数级增长,以及技术如何促成先进搜索解决方案的产生。
随着数据的指数级增长(从TB到PB再到EB),迫切需要一种能够在大海捞针的情况下成功搜索的工具。曾经被誉为简单搜索的功能,现在已成为大多数组织生存工具箱中的必要功能。默认情况下,客户期望组织能提供搜索功能,以便他们可以在搜索栏中输入内容或浏览搜索下拉列表,快速找到他们需要的东西。
越来越难找到不带小放大镜图标的搜索栏的网站和应用。提供全面的搜索是一种竞争优势。
今天,现代搜索引擎致力于提高速度和相关性,并提供包装在丰富的商业和技术特性中的高级功能。Elasticsearch就是这样一个现代搜索引擎,它以速度和性能为核心,拥抱搜索和分析。在处理像Elasticsearch这样的搜索引擎时,我们会遇到不同类型的数据和搜索方式——结构化数据和非结构化数据及其各自的搜索方式。熟悉这些类型的数据对于理解搜索领域非常重要。下面我们就简要介绍一下结构化数据和非结构化数据。
数据主要有两种类型,即结构化数据和非结构化数据。这两类数据之间的根本区别在于数据的存储和分析方式。结构化数据遵循预定义的模式/模型,而非结构化数据是自由格式、无组织且无模式的。
结构化数据是高度组织化的,有明确的形态和格式,符合预定义的数据类型模式。它遵循定义好的模式,并且因结构规范而易于搜索。数据库中的数据被认为是结构化数据,因为在存储到数据库之前,它应该遵循严格的模式。例如,表示日期、数值或布尔值的数据必须采用特定的格式。
对结构化数据的查询会返回精确匹配的结果。也就是说,我们关注的是找到符合搜索条件的文档,而不是它们匹配的程度。这种搜索只有两种结果:要么有结果,要么没有结果——没有“可能”的结果。例如,当搜索“上个月取消的航班”时,期望“可能”取消的航班是没有意义的。结果中可能有零个或多个航班,但搜索不应该返回“与取消的航班接近匹配”的结果。
我们并不关心文档匹配的程度,只关心它们是否匹配,因此结果不附带相关性分数(一个正数,表示结果与查询的匹配程度)。获取上个月取消的所有航班、每周的畅销书或登录用户的活动等传统的数据库搜索就是这样的。
定义 相关性(relevancy)指的是搜索引擎的结果与用户查询的匹配程度。它是一种表示结果与原始查询匹配程度的机制。搜索引擎使用相关性算法来确定哪些文档与用户的查询密切相关(即它们有多相关),并根据结果与查询的匹配程度为每个结果生成一个称为相关性分数的正数。你使用Google搜索时,仔细观察一下搜索结果:顶部的结果与你正在寻找的内容非常相关。因此,我们可以说它们比结果列表底部的条目更相关。Google在内部为每个结果分配了一个相关性分数,并很可能根据这个分数对它们进行排序:分数越高,结果越相关,出现在页面顶部的可能性越大。
非结构化数据是无组织的,不遵循任何模式或格式。它没有预定义的结构。非结构化数据是大多数现代搜索引擎的主要处理内容。非结构化数据包括博客文章、研究论文、电子邮件、PDF、音频和视频文件等。
注意 除了结构化数据和非结构化数据,还有一类数据——半结构化数据。这种数据基本上处于结构化数据和非结构化数据之间。半结构化数据不过是一些带有元数据描述的非结构化数据。
对于非结构化数据,Elasticsearch提供了全文搜索功能,允许用户在大量非结构化文本中搜索特定的词项或短语。全文(非结构化)搜索尝试找到与查询相关的结果。也就是说,Elasticsearch搜索所有最符合查询条件的文档。例如,如果用户搜索关键词“vaccine”(疫苗),搜索引擎不仅搜索与疫苗接种相关的文档,还会包含关于接种、注射及其他与疫苗相关术语的文档。
Elasticsearch使用相似性算法为全文查询生成相关性分数。分数是一个附加到结果的正浮点数,分数最高的文档表示与查询条件的相关性更大。
Elasticsearch能够高效地处理结构化数据和非结构化数据。它的一个关键特性是能够在同一索引中对结构化数据和非结构化数据进行索引和搜索。这使我们能够一起搜索和分析这两种类型的数据,并获得其他方式难以获得的洞察。
传统的搜索主要基于关系数据库。早期的搜索引擎基于在多层应用中实现的分层架构,如图1-1所示。
图1-1 基于传统数据库的搜索
使用where
和like
这样的子句编写的SQL查询为搜索提供了基础,这些解决方案对搜索全文数据以提供现代搜索功能来说,未必是高性能和高效的。
话虽如此,一些现代数据库(如Oracle和MySQL)也支持全文搜索(针对博客文章、电影评论、研究论文等自由文本的查询),但它们在面对大量负载的情况下,可能难以近实时地提供高效的搜索。更多详细信息参见下页的“数据库中的全文搜索”。
分布式搜索引擎(如Elasticsearch)提供的即时可扩展性是大多数数据库所不具备的。一个依赖没有全文搜索能力的后端数据库开发的搜索引擎,甚至可能无法为查询提供相关搜索结果,更不用说提供实时查询结果和应对数据量的增长了。
数据库中的全文搜索
Oracle和MySQL这样的关系数据库也支持全文搜索功能,尽管不如Elasticsearch这样的现代全文搜索引擎功能丰富。但是这两种全文搜索解决方案在存储和检索数据方面有本质的区别,因此在选择使用哪种解决方案之前,我们必须明确自己的需求原型。通常,如果数据模式不会改变或数据量不大,并且我们已经有了一个具备全文搜索能力的数据库引擎,那么用数据库进行全文搜索可能是有意义的。
在传统数据库上构建搜索服务时,我们需要考虑并了解我们的需求是否可以由数据库高效且有效地满足。大多数数据库被设计用来存储大量数据,但遗憾的是,由于以下几点原因,它们不太适合用作全文搜索引擎。
❏ 索引和搜索性能。全文搜索需要高效的索引及高性能的搜索和分析能力,而传统数据库并未对此进行优化。数据库可能难以索引大量数据,因此可能导致查询性能较差。而像Elasticsearch和Solr这样的搜索引擎是专为处理大量文本数据设计的,并可以近实时地提供搜索结果。搜索引擎可以处理大规模数据,同时索引和搜索数据的速度比传统数据库快得多,因为它们从一开始就是为优化搜索操作设计的。更何况,关系数据库还存在缺乏模糊匹配、词干提取、同义词等高级搜索功能的问题。
❏ 搜索。传统数据库的搜索基本上是基于数据值的精确匹配。虽然这适用于对结构化数据进行非搜索相关的查找操作,但对于通常比较复杂的自然语言查询,这是绝对不行的。用户的查询往往存在拼写错误、语法错误或不完整的问题,并且可能包含数据库无法理解的同义词和其他语言结构。
在自然语言查询中,用户可能不会使用他们正在搜索的准确词项(如存在拼写错误),遗憾的是,传统数据库并不支持拼写错误的用户输入。而在现代搜索引擎中,模糊匹配搜索功能(单词相似但不完全相同)解决了这一问题。在传统数据库中,数据通常是归一化的,这意味着它们可能分布在多个表和列中。这可能使在单个查询中跨多个字段搜索数据变得很困难。而且传统数据库也不是为处理全文搜索场景中常见的非结构化数据和半结构化数据设计的。
❏ 文本分析和处理。搜索引擎通常需要处理多种语言和字符集,而传统数据库可能并不支持。搜索引擎进行文本分析和处理以提取文本的含义,但传统数据库并没有为此进行设计或者优化。
❏ 可扩展性和灵活性。全文搜索引擎是为处理大量数据和高查询负载设计的。当处理大量文本数据时,传统数据库可能遇到扩展性的问题。
搜索引擎从一开始就是为处理非结构化数据设计的,而数据库则是为处理结构化数据设计和优化的。这些限制使传统数据库并不适合用作全文搜索引擎。通常使用诸如Elasticsearch、Solr、Lucene等专门的搜索引擎技术为文本数据提供高级搜索功能。
注意 许多数据库已经将文本搜索功能添加到其功能集。然而,它们可能仍然无法在性能、可扩展性和功能上与专业的全文搜索引擎相媲美。
这并不妨碍我们同时拥抱两种技术:在某些使用场景中,可以同时使用传统数据库和搜索引擎。例如,数据库可用于事务处理,搜索引擎可用于搜索和分析。不过,本书的重点是搜索引擎,尤其是Elasticsearch。下面我们就回顾一下现代搜索引擎的时代。
为了满足不断增长的业务需求,现代搜索引擎每天都在积极拥抱令人兴奋的新功能。廉价的硬件加上数据的爆炸性增长,促成了这些现代搜索巨兽的出现。让我们考虑一下当今的搜索引擎及它们提供的功能和特性,我们可以总结出一个好的现代搜索引擎应该提供以下功能:
❏ 对全文(非结构化)和结构化数据提供一流的支持;
❏ 提供输入建议、自动更正和“你是不是想找”推荐;
❏ 容忍用户的拼写错误;
❏ 提供对地理位置的搜索能力;
❏ 可以根据动态的需求轻松扩展,无论是扩容还是缩容;
❏ 提供闪电般的性能,即快速的索引和搜索能力;
❏ 提供高可用和容错的分布式系统架构;
❏ 支持机器学习功能。
在本节中,我们先简要讨论现代搜索引擎的主要功能,然后看一下市场上存在的一些搜索引擎,包括Elasticsearch。
现代搜索引擎是为了满足全文搜索的需求而开发的,同时也支持其他高级功能。它们旨在通过索引和搜索大量文本数据,为用户提供快速且相关的搜索结果(本书后续提及搜索引擎时会省略“现代”这个词)。
搜索引擎可以快速索引大量文本数据并使其可搜索。这个过程通常包括将文本数据拆分为词元,并建立一个倒排索引,从而将每个词元与包含它的文档关联起来。
搜索引擎还需要能进行高级文本分析和处理,如同义词、词干提取、停用词和其他自然语言处理,以便从文本中抽取含义,从而提高搜索结果的质量。它们可以处理各种用户查询,并根据相关性和流行度等各种因素对搜索结果进行排序,还可以处理高查询负载和大量数据,并通过向集群添加更多节点来实现水平扩展。
搜索引擎还应提供高级分析的能力,对数据进行分析,为企业提供总结、归纳和商业智能。它们还需要支持丰富的可视化、近实时搜索、性能监控和基于机器学习的洞察等。
尽管市面上有很多搜索引擎可供选择,但本书只提及其中 3 种,即 Elasticsearch、Solr 和OpenSearch,它们都是基于Apache Lucene构建的。
Elastic的创始人Shay Banon在2000年年初开发了一款名为Compass的搜索产品。它是基于Apache Lucene的开源搜索引擎库。Lucene是Doug Cutting用Java编写的全文搜索库。因为Lucene只是一个库,所以我们必须通过它的API将其导入和集成到应用中。Compass和其他搜索引擎一样,使用Lucene来提供通用的搜索引擎服务,这样我们就不必从头开始将Lucene与应用进行集成。Shay最终决定放弃Compass,转而专注于Elasticsearch,因为Elasticsearch潜力更大。
Apache Solr是一款基于Apache Lucene构建的开源搜索引擎,诞生于2004年。Solr是Elasticsearch的有力竞争对手,拥有一个蓬勃发展的用户社区,并且它比Elasticsearch更接近开源——Elastic在2021年年初从Apache许可证切换到Elastic许可证和服务器端公共许可证(Server Side Public License,SSPL)。尽管Solr和Elasticsearch在全文搜索方面都表现得很出色,但在数据分析方面,Elasticsearch可能更胜一筹。
虽然这两款产品在几乎所有功能上都在竞争,但Solr在处理大型静态数据集的大数据生态系统中更受青睐。显然,在选择产品之前,需要进行原型设计和分析,普遍的趋势是,首次与搜索引擎集成的项目倾向于考虑Elasticsearch,因为它拥有一流的文档、社区和几乎无门槛的部署方式。在采纳并使用一个搜索引擎之前,必须对预期使用场景进行详细的对比。
Elastic在2021年更改了其许可政策。改后的许可适用于Elasticsearch 7.11及以上版本,从开源转变为Elastic许可证和SSPL的双重许可。这种许可允许社区免费使用该产品,但托管服务提供商不能再将这些产品作为服务提供。亚马逊网络服务(Amazon Web Servies,AWS)曾创建了Elasticsearch的一个分支版本——Open Distro for Elasticsearch,并将其作为托管服务提供,Elastic和AWS之间因此发生了争执。这场争执导致了Elasticsearch的许可证变更,最终导致了OpenSearch的诞生。
随着Elastic从开源许可模式转向SSPL模式,一个名为OpenSearch的新产品被开发出来,填补了新许可协议留下的巨大空白。OpenSearch的基础代码是基于开源的Elasticsearch和Kibana 7.10.2版本创建的。该产品的第一个正式发布版本1.0于2021年7月发布。OpenSearch有望成为Elasticsearch在搜索引擎领域的竞争对手。
现在,我们已经对现代搜索引擎和搜索领域的格局有了基本的了解,下面就看一下Elasticsearch概述。
Elasticsearch是一款开源的搜索和分析引擎。它是用Java开发的,基于流行的全文搜索库Apache Lucene 构建的超快速、高可用的搜索引擎。Elasticsearch通过提供具有RESTful接口的分布式系统对Lucene的强大功能进行了封装。Lucene是Elasticsearch的核心,而Kibana是管理和使用Elasticsearch的管理界面。在本书中,我们将通过Kibana的代码编辑器(Dev Tools)进行操作。
全文搜索是Elasticsearch作为现代搜索引擎所擅长的地方。它可以根据用户的搜索条件快速地找出相关的文档,用户也可以搜索精确的内容,如关键词、日期、数字范围或日期范围。Elasticsearch还拥有一系列高级功能,如相关性、“你是不是想找”的搜索建议、搜索内容自动补全、模糊搜索、地理空间搜索和高亮显示等。
除了在提供近实时搜索能力方面处于领先地位,Elasticsearch在大数据的统计聚合方面也表现不俗。当然,我们必须根据使用场景来考虑是否采用这款产品,因为Elasticsearch可能并不适合每种使用场景(参见 1.4.3 节)。除此之外,Elasticsearch 还拥有一系列值得称道的功能,如应用性能监控、预测分析和异常检测,以及安全威胁监控和检测等。
Elasticsearch专注于在收集的数据中发掘更深层次的含义。它可以聚合数据、完成统计计算,并在数据中发现有价值的信息。我们可以使用Kibana工具创建丰富的可视化图表和仪表板,并与他人共享。Elasticsearch可以计算平均值、总和、中位数和众数,还可以对数据进行复杂的分析,如在直方图中对数据进行分桶和其他分析功能。
此外,Elasticsearch还能在数据上运行有监督和无监督的机器学习算法。模型有助于检测异常、找到离群值和预测事件。在监督学习模式下,我们可以提供训练集,以便模型进行学习并做出预测。
Elasticsearch还具有通过监控网络中Web服务器的性能指标(如内存和CPU周期)来观察应用及其健康状况的能力。它让用户可以筛查数百万条Web服务器的日志,以便找到或调试应用的问题。Elasticsearch还投入时间和资源构建安全领域的解决方案,如安全威胁警报、IP过滤、端点防护等。
Elastic是Elasticsearch背后的公司,这家公司主要关注3个核心领域,即搜索、可观测性和安全性,如图1-2所示。让我们依次看一看这些领域。
图1-2 Elasticsearch背后的Elastic公司的核心应用领域
无论是让用户在不同的内容提供商(如Slack、Confluence、Google Drive等)之间进行搜索,还是为应用、软件和网站启用搜索功能,Elastic企业搜索套件都有助于构建模型和定制化的搜索引擎。
搜索可以深度集成到各领域(业务、基础设施、应用等)众多应用中。用户可以创建由Elasticsearch支持的Web应用、由Elasticsearch支持的移动应用或者以Elasticsearch为核心的服务器端搜索服务。在本书的后面,我们将通过示例来学习如何将Elasticsearch作为搜索服务器集成到应用中。
在基础设施上运行的应用会产生大量的指标数据,这些指标数据通常用于应用的可观测性和监控。我们可以在可观测性领域使用Elasticsearch,应用、服务器、机架和模块的状态都可以被监控、记录、跟踪和告警。我们还可以使用Elastic工具进行大规模的应用管理和监控。
Elastic可以在安全领域进行威胁检测和预防,并提供源头恶意软件移除、静态加密等高级功能。作为安全信息和事件管理(security information and event management,SIEM)工具,Elastic正在寻找自己的定位,并通过其先进的安全工具箱来保护组织。
Elasticsearch是搜索引擎的核心,而Elastic的几款产品对其进行了补充。这套产品称为Elastic Stack,包括Kibana、Logstash、Beats和Elasticsearch。(这套产品以前被称为ELK Stack,但在Beats被引入产品套件后更名为Elastic Stack。)
这4种产品的组合通过集成、消费、处理、分析、搜索和存储来自不同来源的各种数据集,来帮助构建企业级应用。如图 1-3 所示,Beats和Logstash将数据写入Elasticsearch,而Kibana则是对这些数据进行可视化的用户界面。
图1-3 Elastic Stack:Beats、Logstash、Elasticsearch和Kibana
在深入了解Elasticsearch的使用场景之前,我们简单地从宏观层面了解一下这些必要的组件。除Elasticsearch之外,其他组件在本书中不再讨论。
Beats是单一用途的数据传输工具,它们从各种外部系统加载数据并将其写入Elasticsearch。多种类型的Beats开箱即用,包括Filebeat、Metricbeat、Heartbeat等,每种都可以完成特定的数据消费任务。这些都是单一用途的组件,例如,Filebeat用于基于文件的传输,Metricbeat用于采集重要的机器和操作系统的内存及CPU信息。Beats的代理安装在服务器上,以便它们可以从来源消费数据并将其发送到目的地。
Logstash是一个开源的数据处理引擎。它从多个来源提取数据并处理它们,然后将其发送到各种目的地。在数据处理过程中,Logstash会转换和丰富数据。它支持众多的来源和目的地,包括文件、HTTP、JMS、Kafka、Amazon S3、Twitter等几十种。它提出了一种管道架构,每个通过管道的事件都根据预配置的规则进行解析和处理,从而创建出一个实时的数据摄取管道。
Kibana是一个多用途的Web控制台,提供了包括执行查询,开发仪表板、可视化图表,创建下拉列表和聚合等多种选项。然而,我们可以使用任何REST客户端与Elasticsearch通信来调用API,不限于Kibana。例如,我们可以使用cURL、Postman或各种语言的客户端来调用API。
将Elasticsearch仅限定于某个特定的使用场景或领域是比较困难的。Elasticsearch在从搜索到分析再到机器学习的许多领域都无处不在。它被广泛应用于多个行业,包括金融、国防、交通、政府、零售、云计算、娱乐、航天等。下面我们大体看一下Elasticsearch是如何在一个组织中使用的。
Elasticsearch凭借其全文搜索能力成为首选技术。但它不局限于全文搜索,还可用于结构化数据和基于地理位置的搜索等。总的来说,客户在3个领域使用Elasticsearch,即应用搜索、企业搜索和网站搜索。
在应用搜索中,Elasticsearch作为核心为应用提供搜索和分析功能。Elasticsearch支持的搜索服务可以设计为满足应用的搜索需求(如搜索客户、订单、发票、电子邮件等)的微服务。
在大多数组织中,数据分散在许多数据存储、应用和数据库中。例如,组织通常与Confluence、内网空间、Slack、电子邮件、数据库、云盘(iCloud drive、Google Drive等)等进行集成。对这些组织而言,整合并搜索来自各种来源的海量数据是一个挑战。这正是Elasticsearch可以用于企业搜索和数据组织的地方。
如果我们有一个已经积累了数据的在线商业网站,那么提供搜索功能就是吸引客户并让他们感到满意的基本条件。网站搜索是Elastic提供的一种软件即服务(SaaS)产品,一旦启动,它就会爬取给定的网站页面,抓取数据并构建由Elasticsearch支持的索引。爬取和索引完成后,网站就可以轻松地与搜索功能集成。网站搜索模块还可以帮助创建搜索栏和相关的代码片段。网站管理员将生成的代码片段嵌入网站的主页,就能轻松地启用搜索栏,从而使网站集成完整的搜索功能。
组织会从各种来源获取大量数据,而这些数据通常是其生存和成功的关键。Elasticsearch可以帮助组织从数据中提取趋势、统计和指标信息,为组织提供有关其运营、销售、营业额、利润等多个特征的信息,以便进行及时管理。
数据安全及潜在的漏洞是组织的噩梦。Elasticsearch的安全分析可以帮助组织分析每处信息——无论是来自应用、网络、终端还是来自云。这种分析可以提供对威胁和漏洞的洞察,让组织及时发现恶意软件和勒索软件,从而降低被黑客攻击的风险。
应用会产生大量的应用日志和指标数据。这些日志可以洞察应用的健康状态。随着云计算和微服务时代的到来,日志分散在各个服务中,要进行有意义的分析变得十分烦琐。这时,Elasticsearch就成为我们的好帮手。Elasticsearch的一个常见使用场景就是索引并分析日志,以达到对应用进行调试和错误分析的目的。
虽然Elasticsearch是一个强大且灵活的搜索和分析引擎,但它并不适用于所有场景。下面就简要讨论一下我们可能遇到的问题和不适合使用Elasticsearch的场景。
Elasticsearch并非适用于每种使用场景。它是一个强大且灵活的搜索和分析引擎,但遗憾的是,这个工具也有其局限性。在选择Elasticsearch来满足需求之前,我们必须把这些局限性纳入考虑范围。下面是几种Elasticsearch可能不适用或效率不高的场景。
❏ 关系数据。当数据具有关系并且需要进行复杂的数据库连接时,Elasticsearch不是一个合适的选择。Elasticsearch不是为处理复杂的关系数据结构设计的。如果数据之间关系很强,那么像MySQL或PostgreSQL这样的关系数据库可能是更好的选择。大多数现代数据库(MySQL、PostgreSQL 等)也提供全文搜索功能,尽管这些功能并不像Elasticsearch这样的现代搜索引擎那样先进。
❏ 事务数据。Elasticsearch是一个“最终一致”的搜索引擎,这使得它不适合需要强一致性的应用场景,如金融交易。对于这些使用场景,可以考虑使用传统的关系数据库或像MongoDB这样的NoSQL数据库。
❏ 地理空间数据。虽然Elasticsearch内置了对地理空间数据的支持,但它可能不是大规模地理空间分析场景最高效的解决方案。对于这些使用场景,可以考虑使用专用的地理空间数据库(如PostGIS)或地理空间分析平台(如ArcGIS)。
❏ 高写入负载。Elasticsearch可以支持高读取负载,但它并没有为高写入负载进行优化。如果需要实时索引大量数据,可以考虑使用专用的索引引擎,如Apache Flume或Apache Kafka。
❏ 联机分析处理(online analytical processing,OLAP)数据。如果需要对大数据集进行复杂的多维分析,传统的OLAP数据库(如Microsoft Analysis Services或IBM Cognos)可能比Elasticsearch更适合。
❏ 大型二进制数据。虽然Elasticsearch可以处理大量的文本数据,但它可能不是索引和搜索大型二进制数据(如视频或图像)的最佳解决方案。对于这些使用场景,使用专用的二进制数据存储可能更好,如Hadoop分布式文件系统(HDFS)、Amazon S3或Azure Files。
❏ 实时分析。Elasticsearch非常适合对大数据集进行实时搜索和分析,但它可能不是实时数据处理和分析的最佳解决方案。相反,可以考虑使用专门的实时分析平台,如Apache Spark或Apache Flink。
❏ 对延迟敏感的应用。尽管Elasticsearch是为处理高容量的搜索和分析查询设计的,但在处理大量数据时它仍然可能出现延迟。对于需要亚毫秒级响应的应用,像Apache Solr这样的专用搜索引擎或者像Apache Cassandra这样的列式数据库可能更适合。
❏ 其他类型。Elasticsearch不是处理时间序列数据(一般也称时序数据)、图数据、内存数据和一些其他类型数据的首选解决方案。如果需要存储和分析时间序列数据,像InfluxDB或TimescaleDB这样专用的时间序列数据库可能更适合。同理,像Neo4j这样的图数据库可能更适合处理图数据。
在选择Elasticsearch作为技术解决方案之前,评估具体的使用场景和需求非常重要。下面我们就讨论Elasticsearch作为一个工具、技术和搜索解决方案的常见误解。
关于Elasticsearch的一个主要误解是认为它是传统的关系数据库,还有一个常见的误解是觉得设置Elasticsearch很容易,而实际上,设置一个中等规模的集群需要在默认配置的基础上做许多调整。此外,Elasticsearch通常会被认为是专门用于文本搜索的技术,而事实上它可以用于广泛的搜索和分析场景。下面列举了关于Elasticsearch的一些常见误解。
❏ 设置和管理Elasticsearch很容易。虽然Elasticsearch的安装和入门相对简单,但随着数据增长和使用场景增加,管理和扩展可能变得具有挑战性。尽管 Elasticsearch 的一切都是开箱即用的,这让工程师的工作变得很轻松,但将 Elasticsearch 用于生产环境还需要做很多功课。我们可能需要调整集群配置、调整内存分配、处理节点故障,甚至随着数据的增长,还需要扩展集群以处理高达PB量级的数据等。
❏ Elasticsearch是关系数据库。Elasticsearch不是关系数据库,不支持传统关系数据库的特性,如事务、外键和复杂的连接操作等。例如,不能在 Elasticsearch 中强制检查引用的完整性或进行复杂的连接操作。如果需要这些特性,像MySQL或PostgreSQL这样成熟的关系数据库是最佳解决方案。
❏ Elasticsearch可以处理所有类型的数据。Elasticsearch功能丰富,可以处理多种数据类型,但它并不是可以同样轻松地处理每种类型的数据。例如,它可能不是实时数据处理和分析或者处理大型二进制数据的最佳解决方案。如果需要存储和处理大型二进制数据,如视频或图像,可以考虑使用专用的二进制数据存储,如HDFS或Amazon S3。
❏ Elasticsearch只能用于文本搜索。虽然Elasticsearch非常适合文本搜索,但它也可以对结构化数据和非结构化数据进行复杂的分析。例如,可以使用Elasticsearch聚合、分析日志数据,并使用Kibana对数据进行可视化。
❏ Elasticsearch可以替代所有其他技术。Elasticsearch是一个强大且灵活的技术,但并不是一个万能的解决方案,也不是每种使用场景的最佳选项。例如,它永远不能替代传统的关系数据库。
❏ Elasticsearch总是比其他技术更快。Elasticsearch确实是为高性能设计的,并且预期在高负载下仍能表现良好。然而,Elasticsearch能做的只有这么多,其性能高低主要取决于系统工程师对它微调的程度。
❏ Elasticsearch只处理大数据。Elasticsearch可以处理PB量级的大数据集,但它在处理GB量级的小数据集时同样表现良好。例如,可以使用Elasticsearch搜索和分析一个组织的小型电子邮件数据库或一个初创公司的数据,而不需要付出太多额外的努力。
这些只是关于Elasticsearch的一些常见误解的例子。如前所述,在选择Elasticsearch或任何其他技术之前,必须仔细评估具体的需求和使用场景。
许多组织使用Elasticsearch进行从搜索到业务分析、日志分析、安全警报监控和应用管理等各方面的工作,并且还把它用作文档存储。让我们来看一看其中的一些组织,以及它们如何在日常运营中使用Elasticsearch。
Uber使用Elasticsearch来支持乘车需求预测。它通过存储数百万个事件,以近实时的速度搜索和分析数据来实现这一点。Uber根据位置、时间、日期和其他变量(包括把过去的数据纳入计算)来预测乘客需求。这有助于Uber更好地提供乘车服务。
Netflix采用Elastic Stack为其内部团队提供客户洞察。它还使用Elasticsearch进行日志事件分析,以支持调试、告警和管理其内部服务,其电子邮件和客户运营活动也都是由Elasticsearch引擎支持的。来自 Netflix 的电子邮件里提到新添加的电影或电视剧背后的活动分析都是由Elasticsearch支持的。
PayPal采用Elasticsearch作为搜索引擎,使客户能够存储和搜索他们的交易记录。该公司还提供了交易搜索功能和分析功能,供商家、终端客户和开发人员使用。
类似地,在线电子商务公司eBay也采用Elasticsearch来支持终端用户的全文搜索。用户在搜索eBay的商品库存时,实际上是直接使用了Elasticsearch。该公司还使用Elastic Stack进行分析、日志监控,并将交易数据存储在文档中。
GitHub是一个深受开发者喜爱的代码仓库,它使用Elasticsearch对其800万个(并且还在增加)代码仓库进行索引,其中包含超过20亿份文档,以此为用户提供强大的搜索体验。
类似地,Stack Overflow使用Elasticsearch为开发者快速提供相关的答案,而Medium(一个流行的博客平台)则使用Elastic Stack为读者提供近实时的搜索服务。
在结束本章之前,我们有必要谈论一个最近很火的话题——生成式人工智能工具,如OpenAI的ChatGPT和Google的Bard。我认为,这些工具的引入将极大地改变搜索领域。让我们讨论一下它们对现代搜索的影响,包括像Elasticsearch这样的搜索引擎。
你一定听说过最近互联网上最具革命性的产品——ChatGPT。ChatGPT是由OpenAI团队在2022年11月开发并发布的生成式人工智能工具。在我25年的IT经验中,我从未见过像ChatGPT这样在互联网上引起如此轰动的技术工具。很少有这样技术上先进的工具落到普通大众手里,能够以不敢想象的方式帮助他们,如为夏天去雅典的旅行制订旅行计划,用通俗的语言总结法律文件,制定自助减肥计划,分析代码的安全性和性能漏洞,设计应用的数据模型,对比和分析特定使用场景所需的技术,给Twitter(现X公司)的CEO写投诉信等。
ChatGPT是一个在基于转换器的生成式预训练(generative pretrained transformer,GPT)架构的基础上构建的对话智能体(聊天机器人),它能够根据用户的提示词生成类似人类语言的回答。它是一个大语言模型(large language model,LLM)的实例,为对话而设计,具体的目标是在进行有意义的对话时生成安全且相关的内容。该模型使用大量的文本数据进行训练,它通过学习预测句子中的下一个单词的方式进行工作。它一般使用互联网上多样化的文本进行训练,但也可以使用特定的数据集进行微调以完成各种特定的任务。通过这个过程,该模型学习人类语言文本的各个部分,即语法、标点、句法、关于世界的事实,以及一定程度的推理能力。
注意 LLM是指任何大模型的广义术语,这些模型经过训练,能够理解或生成类似人类语言的文本。这些模型的特点是它们有大量的参数,并且能够处理各种自然语言处理任务。LLM可以基于各种架构和训练方法进行训练。
随着ChatGPT的发布,利用人工智能进行搜索的领域几乎一夜之间出现了一场激烈的竞赛。ChatGPT已成为许多行业的颠覆者,对Google搜索也构成了不小的威胁。未来几年,类似于ChatGPT这样的人工智能支持的工具还将颠覆更多的行业。在巨大的压力下,可能是为了保住其搜索领导者的地位,Google决定推出自己的对话生成式人工智能,其名为Bard的智能体在2023年5月向公众开放。
与此同时,微软承诺在2019年以来的30亿美元初始投资的基础上,再给ChatGPT追加100亿美元的投资。微软的Edge浏览器通过Bing搜索引擎集成了ChatGPT,并在2023年5月向公众开放。此外,微软还推出了人工智能驱动的Microsoft 365应用,因此AI智能体现在可以在Microsoft Word、Excel、电子邮件和其他工具中使用。而Meta的LLaMA也是生成式人工智能竞赛中的一个竞争对手。
GPT-3和GPT-4模型是通过对数十亿份数字化的图书、文章、论文、博客等内容进行训练得到的。GPT-4模型的数据输入截至2021年9月(它无法获取这个日期之后的数据)。虽然GPT-4无法访问互联网以获取实时信息,但在我写本书的时候,OpenAI刚刚为其Plus用户推出了一个网页浏览器的测试版。因此,我预计OpenAI可联网的生成式AI助手很快就会向公众开放。
搜索工程师总会被问到一些根本性的问题,包括生成式人工智能将如何改变搜索的方式。让我们通过询问ChatGPT来回答这个问题,看看AI智能体如何补充或帮助现代搜索,或者改变其演进方向。像生成式人工智能这样的工具将在以下几方面重塑搜索领域。
❏ 直观搜索——搜索查询将变得更具对话性和直观性。像GPT-4这样的生成式人工智能模型对自然语言有着更深入的理解,这使它们能够更有效地理解复杂的查询。用户将不再需要依赖特定的关键词或短语,他们可以像与另一个人交谈一样简单地提问。这将使搜索结果更准确和相关,因为人工智能可以更好地理解查询的上下文和意图。随着更强的生成式AI智能体和模型的引入和发布,我们可以预见现代搜索引擎(如Elasticsearch)提供的全文搜索功能将发生重大变化。随着这项技术被越来越多地整合到搜索平台中,我们可以期待看到一些将重新定义用户和开发者的搜索体验的关键改变。
❏ 个性化搜索——随着生成式人工智能的引入,搜索结果可以变得更加个性化和自适应。搜索引擎将能够从用户的偏好、行为和搜索历史中学到许多有价值的信息,从而帮助引擎根据每个用户的需求定制搜索结果。随着人工智能不断收集数据,它将不断完善对用户搜索意图的理解,从而带来越来越个性化的搜索体验。
❏ 预测性搜索——生成式人工智能具有让搜索引擎更加主动预测用户需求的潜力。人工智能驱动的搜索引擎可能不仅仅是响应查询,而是能够基于用户之前的交互或当前上下文来预测用户感兴趣的信息。这将使搜索平台能够主动提供相关的建议,从而减少用户额外的查询,以此提升搜索体验。
❏ 高级搜索——生成式人工智能将使搜索引擎能够提供更多样化、更丰富的搜索结果。通过理解查询的上下文和语义,人工智能驱动的搜索引擎可以生成内容摘要和相关的可视化内容,甚至合成新的信息来辅助回答用户的问题。这将带来超越仅连接到现有内容的更全面、信息更丰富的搜索体验。
在我看来,生成式人工智能的引入将彻底改变全文搜索的能力,使搜索引擎变得更具对话性、更个性化、适应性更强,并且更主动。这将不只是提升用户体验,还可以为企业和开发人员提供新的机会,创造新的搜索应用和服务。随着人工智能的到来,团队正在努力适应搜索领域即将发生的变化。所以,期待一场搜索领域的革命吧!
本章为使用Elasticsearch奠定了基础,介绍了其搜索功能,并探讨了搜索是如何成为众多应用不可或缺的一部分的。在第2章中,我们将安装、配置并运行Elasticsearch和Kibana,通过索引一些文档并执行搜索查询和分析来使用Elasticsearch。
❏ 搜索是新常态,也是组织寻求竞争优势最重要的功能。
❏ 过去,我们曾使用关系数据库作为搜索引擎的后端服务来支持搜索需求,但它们无法实现现代搜索引擎中全面的搜索功能。
❏ 现代搜索引擎提供了多方面的全文搜索能力和从基础搜索到高级搜索及分析功能的多重好处,所有这些都具有极高的性能。它们还预期能够处理从TB量级到PB量级的数据,并在需要时进行扩展。
❏ Elasticsearch是一款基于Apache Lucene构建的开源搜索和分析引擎。它是一款由Java开发的高可用的服务器端应用。
❏ 由于Elasticsearch是一款与编程语言无关的产品,所以与服务器之间的通信是通过使用丰富的RESTful API在HTTP上进行的。这些API以JSON格式接收和发送数据。
❏ Elastic Stack是一套由Beats、Logstash、Elasticsearch和Kibana组成的产品套件。Beats是单一用途的数据传输器,Logstash是数据处理的ETL(提取、转换、加载)引擎,Kibana是管理UI的工具,而Elasticsearch是该套件的核心。
❏ Elastic Stack使得组织可以在搜索、可观测性和安全性3个核心领域中开展工作。
❏ Elasticsearch在过去几年中变得越来越受欢迎,原因在于其强大的结构化/非结构化搜索和分析能力、丰富的RESTful API、无模式的特性,以及高性能、高可用和可扩展的特点。
❏ 人工智能驱动的搜索已经到来。随着生成式人工智能和ChatGPT的出现,搜索领域将被进一步探索,搜索将变得更加直观和具有预测性。