搜索百科(3):Elasticsearch — 搜索界的“流量明星”

news/2025/9/21 20:17:22/文章来源:https://www.cnblogs.com/infinilabs/p/19104066

大家好,我是 INFINI Labs 的石阳。

欢迎关注 《搜索百科》 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。

前两篇我们探讨了搜索技术的基石 Apache Lucene 和企业级搜索解决方案 Apache Solr。今天,我们来聊聊一个真正改变搜索游戏规则,但也充满争议的产品 — Elasticsearch

引言

如果说 Lucene 是幕后英雄,那么 Elasticsearch 就是舞台中央的明星。借助 REST API、分布式架构、强大的生态系统,它让搜索 + 分析成为“马上可用”的服务形式。

在日志平台、可观察性、安全监控、AI 与语义检索等领域,Elasticsearch 的名字几乎成了默认选项。

Elasticsearch 概述

Elasticsearch 是一个开源的分布式搜索和分析引擎,构建于 Apache Lucene 之上。作为一个检索平台,它可以实时存储结构化、非结构化和向量数据,提供快速的混合和向量搜索,支持可观测性与安全分析,并以高性能、高准确性和高相关性实现 AI 驱动的应用。

  • 首次发布:2010 年 2 月
  • 最新版本:9.1.3(截止 2025 年 9 月)
  • 核心依赖:Apache Lucene
  • 开源协议:AGPL v3
  • 官方网址:https://www.elastic.co/elasticsearch/
  • GitHub 仓库:https://github.com/elastic/elasticsearch

起源:从食谱搜索到全球“流量明星”

Elasticsearch 的故事始于以色列开发者 Shay Banon。2010 年,当时他在学习厨师课程的妻子需要一款能够快速搜索食谱的工具。虽然当时已经有 Solr 这样的搜索解决方案,但 Shay 认为它们对于分布式场景的支持不够完善。

基于之前开发 Compass(一个基于 Lucene 的搜索库)的经验,Shay 开始构建一个完全分布式的、基于 JSON 的搜索引擎。2010 年 2 月,Elasticsearch 的第一个版本发布。

随着用户日益增多、企业级需求增强,Shay 在 2012 年创立了 Elastic 公司,把 Elasticsearch 不仅作为开源项目,也逐渐商业化运营起来,包括提供托管服务、企业支持,加入 Logstash 日志处理、Kibana 可视化工具等,Elastic 公司也逐渐从一个纯搜索引擎项目演变为一个更广泛的“数据搜索与分析”平台。

协议变更:开源和商业化的博弈

Elasticsearch 的发展并非一帆风顺。其历史上最具转折性的事件当属与 AWS 的冲突及随之而来的开源协议变更

  1. 早期:Apache 2.0 协议

2010 年 Shay Banon 开源 Elasticsearch 时,最初采用的是 Apache 2.0 协议。Apache 2.0 属于宽松的自由协议,允许任何人免费使用、修改和商用(包括 SaaS 模式)。这帮助 Elasticsearch 快速壮大,成为事实上的“搜索引擎标准”。

  1. 协议变更:应对云厂商“白嫖”

随着 Elasticsearch 的流行,像 AWS(Amazon Web Services) 等云厂商直接将 Elasticsearch 做成托管服务,并从中获利。Elastic 公司认为这损害了他们的商业利益,因为云厂商“用开源赚钱,却没有回馈社区”。2021 年 1 月,Elastic 宣布 Elasticsearch 和 Kibana 不再采用 Apache 2.0,改为 双重协议:SSPL + Elastic License。这一步导致社区巨大分裂,AWS 带头将 Elasticsearch 分叉为 OpenSearch,并继续以 Apache 2.0 协议维护。

  1. 再次转向开源:AGPL v3

2024 年 3 月,Elastic 宣布新的版本(Elasticsearch 8.13 起)又新增 AGPL v3 作为一个开源许可选项。AGPL v3 既符合 OSI 真正开源标准,又能约束云厂商闭源托管服务,同时修复社区关系,Elastic 希望通过重新拥抱开源,减少分裂,吸引开发者回归。

Elasticsearch 从宽松到收紧,再到回归开源,是在社区生态与商业利益间寻找平衡的过程。

基本概念

要学习 Elasticsearch,得先了解其五大基本概览:集群、节点、分片、索引和文档。

  1. 集群(Cluster)

由一个或多个节点组成的整体,提供统一的搜索与存储服务。对外看起来像一个单一系统。

  1. 节点(Node)

集群中的一台服务器实例。节点有不同角色:

  • Master 节点:负责集群管理(分片分配、元数据维护)。
  • Data 节点:存储数据、处理搜索和聚合。
  • Coordinating 节点:接收请求并调度任务。
  • Ingest 节点:负责数据写入前的预处理。
  1. 索引(Index)

类似于传统数据库的“库”,按逻辑组织数据。一个索引往往对应一个业务场景(如日志、商品信息)。

  1. 分片(Shard)

为了让索引能水平扩展,Elasticsearch 会把索引拆分为多个 主分片,并为每个主分片创建 副本分片,提升高可用和查询性能。

  1. 文档(Document)

Elasticsearch 存储和检索的最小数据单元,通常是 JSON 格式。多个文档组成一个索引。

集群架构

Elasticsearch 通过 Master、Data、Coordinating、Ingest 等不同角色节点的协作,将数据切分成分片并分布式存储,实现了高可用、可扩展的搜索与分析引擎架构。

快速开始:5 分钟体验 Elasticsearch

1. 使用 Docker 启动

# 拉取最新镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:9.1.3# 启动单节点集群
docker run -d --name elasticsearch \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "xpack.security.enabled=false" \docker.elastic.co/elasticsearch/elasticsearch:9.1.3

2. 验证安装

# 检查集群状态
curl -X GET "http://localhost:9200/"

3. 索引文档

# 索引文档
curl -X POST "http://localhost:9200/myindex/_doc" -H 'Content-Type: application/json' -d'
{
"title": "Hello Elasticsearch",
"description": "An example document"
}'

3. 搜索文档

# 搜索文档
curl -X GET "http://localhost:9200/myindex/_search" -H 'Content-Type: application/json' -d'
{"query": {"match": {"title": "Hello"}}
}'

结语

Elasticsearch 是搜索与分析领域标杆性的产品。它将 Lucene 的能力包装起来,加上分布式、易用以及与数据可视化、安全监控等功能的整合,使搜索引擎从专业技术逐渐变为“随手可用”的基础设施。

虽然协议变动、与 OpenSearch 的分叉引发争议,但它在企业与开发者群体中的实际应用价值依然难以替代。


🚀 下期预告

下一篇我们将介绍 OpenSearch,探讨这个 Elasticsearch 分支项目的发展现状、技术特点以及与 Elasticsearch 的详细对比。如果您有特别关注的问题,欢迎提前提出!

💬 三连互动

  1. 你或公司最近在用 Elasticsearch 吗?拿来做了什么场景?
  2. 在 Elasticsearch 和 OpenSearch 之间做过技术选型?
  3. 对 Elasticsearch 的许可证变化有什么看法?

对搜索技术感兴趣的朋友,欢迎关注《搜索百科》专栏,一起探讨与学习!

✨ 推荐阅读

  • 搜索百科(2):Apache Solr — 企业级搜索的开源先锋
  • 搜索百科(1):Lucene — 打开现代搜索世界的第一扇门

🔗 参考

  • Elasticsearch 官方文档
  • Elasticsearch 协议变更声明
  • Elasticsearch Architecture V: Node Roles

原文:https://infinilabs.cn/blog/2025/search-wiki-3-elasticsearch/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打印机漏洞、匿名协议与AWS安全:一周技术热点解析

本周技术热点包括Windows打印机驱动漏洞攻击、MIT提出的Riffle匿名通信协议替代方案、AWS账户入侵后的持久化技术分析,以及Linus Torvalds对代码规范的争议性观点。文章还涵盖BSidesPhilly会议征稿通知。打印机水坑攻…

从零开始训练推理模型:GRPO+Unsloth改造Qwen实战指南

推理型大语言模型现在确实火了。这类模型的特点是会先对问题做充分思考,然后再给出答案,而不是直接回复。 虽然早期训练推理型 LLM 的方法多半被各家公司当作核心机密,但最近的DeepSeek-R1、DeepSeekMath、Kimi-k1.…

ALLinSSL,开源免费的SSL证书自动化管理平台

在网络安全日益重要的今天,SSL/TLS 证书不仅是 HTTPS 协议的基石,也是保护用户数据、提升 SEO 排名的关键。然而传统证书管理方式繁琐、低效,尤其在多域名或复杂云环境下,极易出错。ALLinSSL 作为一款开源免费的 S…

《原子习惯》-读书笔记5

2025.09.18 Day5 第5章 培养新习惯的最佳方式 1、随着习惯的形成,你的行为会受到你的潜意识的支配。你会身不由己地陷入旧的模式而不自知。2、你重复这些模式的次数越多,你就越不可能质疑自己在做什么以及为什么要这…

03-袁东申论-概括原因

1 能作为原因的有一下: 1.因为等标志词 2.形容词 3。对策 4.影响2 老师说,用带入的方法,看看这个是不是原因;3 对于市政的做法原因,我认为很大程度叫你找原因;45 看材料第一步,就是粗读;6 第一段没有讲原因7 相…

实现双向循环链表 - 详解

实现双向循环链表 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

SpringBoot控制层接收参数处理、Logback日志入门和使用 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025-09-21 网站前几分钟还运行的好好地,几分钟后查看居然显示文件无法加载,访问首页提示无法访问此网站??!==ssl证书过期+域名解析失效

原来是用https访问的,ssl证书过期后就无法使用https访问了,文件所在的业务场景有可能需压强制使用https来访问,把ssl证书续上就行了, 还有就是查看你的服务器控制台,看看域名解析是否正常,我查看了一下,我去!域…

20231321王曦轶《密码系统设计》第二周

第一周预习报告 学习内容HeadFirstC嗨翻C语言第8章 《Windows C/C++加密解密实战》第 3,5 章第三章重点3.4,3.5,特别3.4.4 第五章重点5.3.7AI 对学习内容的总结(1分) 要求让AI(kimi,元宝等)阅读学习内容并进行总…

爱锋拍照工具 - 隐私政策

隐私政策概述 本隐私政策说明了拍照工具应用(以下简称"我们"或"应用")如何收集、使用、存储和保护您的个人信息。 🔍 信息收集 相机和媒体访问 相机权限: 用于扫描二维码和拍摄照片/视频 照片…

周计划+总结

这是第一期的周计划+总结(被我爸催的。。。。。后面一周一更 周一到周四我爸出差,周五有课,所以只有在下午能有时间做信息学,周一,周二,周五,每天做题,从题目池里面抽,周三周四用于补题和总结,并找相关的题目…

C#通讯之网络通讯 TCP UDP - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[POI 2004] MOS

一道很有意思的贪心题,似乎noi导刊上有?记不太清了,反正是做出来了。 题意 有一个桥,一个火把,一堆人。 这对人要过桥,过桥有一些条件。需要过桥的人有火把不可同时过两个以上每次过桥的花费时间是两人中花费最高…

第03周 面向对象入门2与类的识别

什么样的方法应该用static修饰? static修饰的方法属于类本身,而不是类的实例。通常适用于以下几种情况: 比如Java中的Math类,用于创建对象的静态方法。 不用static修饰的方法往往具有什么特? 非static修饰的方法,…

完整教程:启用GPU对模型进行推理,安装cuda toolkit cuDNN 9

完整教程:启用GPU对模型进行推理,安装cuda toolkit &cuDNN 9pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

25秋周总结3

总结 这周的考试我还是挺稳的,并没有挂分,除了周一本来有 300pts 但是没有调出来比较可惜,其他场都已经打到上限了。所以现在我需要突破,如何做出更多的题?首先我要找出我不擅长的题,我发现最主要的就是一些需要…

R ggplot2学习Nature子刊一张图,换数据即可用! - 指南

R ggplot2学习Nature子刊一张图,换数据即可用! - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

AI 在教育领域的落地困境:个性化教学与资料隐私的平衡之道

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025-06-10.购买联想thinkpad 16p

2025-06-10.购买联想thinkpad 16p 创建时间:2025-06-10 18:03 星期二 你的每一份记录都是美好的回忆,加油! 日记信息 地点:南京 心情:好 事件:购买联想笔记本电脑今日小记 事件1:2025-06-10.淘宝购买联想thinkp…