跳到正文

目录

elastic/elasticsearch:77k Stars 的搜索分析引擎,今天为什么还在 Trending

范围说明:Elasticsearch 是一个 Star 数超过 6 万、体积约百万行级 Java 的开源项目。本文不展开 ES 教程,也不复述入门 CRUD。只回答三件事:它今天为什么仍值得看、9.x 主线到底改了什么、采用边界在哪里。文中的版本号与发布时间取自 Elastic 官方发布公告与官方文档。

一、先给判断

Elasticsearch 是一个「过了明星期、但仍是基础设施级」的仓库。它频繁出现在 GitHub Trending,通常不是因为出现爆款新功能,而是对应两类信号:重大版本发布,以及生态里程碑(新查询语言 GA、底层 Lucene 升级)。把这两类信号拆开看,判断就清楚了。

我的结论是:ES 没有转入维护期,正处在「搜索 + 分析 + 向量 + 可观测」四条线同步推进的阶段。理由如下:

  • 向量搜索成为默认能力:BBQ(Better Binary Quantization)量化在 9.1 起成为高维密集向量的默认方案,semantic_text 字段类型把「文本 → embedding → 检索」收敛成一步。
  • ES|QL 从分析走向检索:这套管道式查询语言 8.14 GA,9.x 补上了全文检索、语义检索、混合检索与相关度排序,不再只是聚合工具。
  • metrics 引擎列式化:2026 年的 9.4 把时序指标存储改成了全列式引擎,这会让「ES 只是搜索引擎」的旧认知过时。

这三点合在一起,才是它持续占据 Trending 的真实原因。

二、项目地图:核心模块构成

Elasticsearch 是一个用 Java 编写、Gradle 构建的仓库,内部按职责切成多个模块:

模块职责关键依赖
server节点启动、集群协调、shard 分配Netty、Apache Lucene
modules/ingest-*数据预处理 pipelineGrok、GeoIP、CSV
modules/mapper-*字段类型映射Lucene 倒排索引
x-pack安全、机器学习、监控Bouncy Castle、OpenJDK
libs/core工具类与公共抽象SLF4J、Apache Commons
distribution/构建产物(tar、deb、rpm、docker)Gradle

关于许可证要说清楚,这里常被误解。ES 在 2010 年开源时采用 Apache 2.0;2021 年的 7.11 版本把源码改成 SSPL + Elastic License 2.0 双许可(默认发行版一直走 Elastic License 2.0);2024 年 9 月又增加了 AGPLv3 作为可选项。所以「ES 基础搜索能力完全开源」这个说法并不准确——默认发行版整体落在 Elastic License 2.0 之下,只是源码可见。2021 年这次授权收紧,也是 AWS 另起炉灶 fork 出 OpenSearch 的直接原因。

三、先说原理:凭什么它能「什么都做」

在讲 9.x 之前,值得花半分钟理解 ES 的基础设施。因为它最近几年的方向——把全文检索、聚合分析、向量检索、时序存储放在同一个索引里——全部建立在这些底子上。

  • 倒排索引(inverted index):写入时先由分析器(analyzer)分词,再建一张「词 → 文档列表」的倒排表。查询时直接查词表,不必扫全量文档。这是全文检索比 Like 快几个数量级的原因。
  • BM25 相关度评分:搜索结果按「词频 × 逆文档频率」打分排序,而不是按出现次数线性排。理解这一点,才能解释为什么 ES 默认排序往往「符合直觉」。
  • 近实时(near-real-time):新写入的数据先进内存 segment,默认约每秒 refresh 一次才可被搜到;落盘靠 translog,后台再合并 segment。它追求的是「秒级可见 + 高吞吐」,而不是关系库那种「提交即持久」的强一致。
  • shard 与 replica:一个索引切成若干分片水平分布,每个分片有副本。集群健康 green / yellow / red,对应「全佳 / 缺副本 / 不可恢复」。

这几件事决定了 ES 的使用边界:它擅长分析与检索吞吐,代价是写入可见有延迟、不是强一致事务库——后面「采用边界」一节会回到这点。

四、9.x 主线:4 个值得知道的方向

先给一条被很多文章写错的时间线。ES 的 9.x 始于 2025 年:9.0 于 2025 年 4 月发布,构建在 Lucene 10 之上(网上流传的「9.0 在 2024-04」是错的,那一年 8.15 才刚把 semantic_text 带进来)。随后 9.1(2025 年中)把 BBQ 设为高维向量默认量化并引入 ACORN;2026 年上半年发布的 9.4 完成了 metrics 引擎的列式化重构。节奏是一年一个大版本,而不是某些资料里写的「6 个月一次」——8.x 时代才是小版本高频迭代。

1. 向量搜索从「加装」变成「一等公民」

  • BBQ 量化默认化:BBQ 把 float32 向量按维度压成 1 bit,配合每向量 14 字节的校正数据,内存大约降到 1/32,同时靠预计算的校正因子保住检索质量。9.0 里高维向量默认还是 int8_hnsw,9.1 起对≥384 维的 float / bfloat16 向量,默认就自动套 BBQ + HNSW。它要求至少 64 维,对文本 embedding 效果最好。
  • 带过滤的向量检索:HNSW 做过滤向量检索时,朴素做法会在图上继续遍历不满足过滤条件的节点,导致慢。9.1 引入的 ACORN-1 把过滤条件融进图遍历,只评估能通过过滤的节点,官方实测典型查询提速约 5 倍。
  • semantic_text 字段类型:这是 ES 8.15(2024-08)引入、2025-03 GA 的能力。它的意义是省掉一整条手工链路——不用再自己配 ingest pipeline、手动调 embedding 模型、自己管理向量字段。只需声明一个 semantic_text 字段并指定 inference_id,写入与查询时 ES 自动调用内置的 multilingual-e5-small 推理端点生成向量,还能按需开 BBQ 量化。

对 RAG 应用这几点很关键:之前「文本 → embedding → 写入 ES」要自己拼,现在 ES 内置了;之前向量检索要么吃满内存、要么精度滑坡,BBQ + 14 字节校正在两者之间给了个默认解;之前「按过滤条件找相似」糊在一层,ACORN 把这一层也做掉了。

2. ES|QL:从分析语言走向检索语言

ES|QL(Elasticsearch Query Language)是 8.11 引入、8.14(2024 年)GA 的管道式查询语言,目标是把「比 DSL 易读、比 SQL 原生」落到一套管道里。它最初面向日志、指标这类时序分析,9.x 阶段补上了检索能力:

FROM books METADATA _score
| WHERE match(title, "Shakespeare")
| SORT _score DESC
| LIMIT 10

值得关注的能力:

  • 聚合:STATS 替代 DSL 里的 aggregations
  • 补字段:ENRICH,用查找表给文档补属性
  • 跨索引连接:LOOKUP JOIN,9.x 还支持远程集群
  • 全文与语义检索:match() / qstr、对 semantic_text 的语义搜索,以及带权重的混合检索
  • 相关度排序:用 METADATA _score 拿到评分再 SORT _score DESC

也就是说,ES|QL 现在能在一个管道里做「BM25 全文 + 向量召回 + 语义检索」的混合查询,不一定要回到 Query DSL 拼多个 API。对新的查询,把它作为首选是合理的;老 DSL 可以逐步迁。

3. Lucene 10 底座升级

ES 9.0 把底层 Lucene 升到 10.x。对用户而言 API 不变、基本无感,但底层换来的是改进的并行处理、更聪明的索引方式与硬件级优化。这是「无感但有收益」的一类升级,不必深追内部结构,知道它顺带带来整体性能提升就够了。

4. 聚合优化 + 2026 年的列式 metrics 引擎

聚合层面,composite 等分页聚合和 date_histogram 时区处理在 9.x 有持续优化,主要利好大规模聚合(上百万 bucket 的场景)。

但 2026 年最值得知道的是另一件事:9.4 把时序指标(TSDS)存储重构成了全列式引擎。官方给出的数据是:每条数据点从约 25 字节降到 3.75 字节(约 6.6× 存储节省),时间序列查询快约 160×,并且原生支持 PromQL 与 OpenTelemetry 摄入。同版本的向量侧也有进展——通过 NVIDIA cuVS 做 GPU 加速向量索引(索引吞吐约 12×),BBQ 的 disk 变体让高过滤性查询的延迟降低约 3×。

这不再是「搜索引擎的小修补」,而是把 ES 推成「日志、指标、全文、向量同一平台」的信号。如果你只用它做数据库搜索,这些和你无关;如果你把它当可观测 + 检索的底座,这几点值得重看。

五、采用边界

适合

  • 搜索 + 分析混合场景:电商搜索、日志分析、应用监控
  • RAG / 向量检索:pgvector 不够用、需要更完整向量 + 混合检索时的升级路径
  • 多模检索:全文 + 向量 + 聚合在一个索引里处理
  • 需要强聚合:nested / pipelined aggregation
  • 可观测与检索共用一套平台:9.4 列式指标 + ES|QL 之后,指标、日志、检索能收在一处
  • 运维成熟:它需要专门的集群运维能力

不太适合

  • 极简搜索:Meilisearch、Typesense 轻很多,几分钟能起,不用管 JVM
  • 强一致事务:ES 不是事务数据库,跨文档事务不支持
  • 数据全留内存的小数据集:为省载体直接上轻量内存型引擎更划算
  • 预算敏感:JVM 堆内存建议按 50% 规则预留(堆之外还有向量索引、filesystem cache),小数据量下维护开销高于 Postgres 加全文索引
  • 不想运维基础设施:直接走 Elastic Cloud,或换 Algolia / Meilisearch Cloud

升级建议

  • 7.x → 8.x:7.x 已 EOL,升级有官方文档全程覆盖
  • 8.x → 9.x:有 breaking changes,比如默认开安全(TLS + 认证)、映射约束收紧,需要灰度
  • OpenSearch 用户:OpenSearch 是 ES 7.10 的 fork,9.x 的向量与 ES|QL 能力未必同步到了下游;OpenSearch 3.1 自己也做了 semantic 字段这类对齐特性,迁移前要逐项验证

六、和 OpenSearch / Meilisearch / Typesense 的边界

维度ElasticsearchOpenSearchMeilisearchTypesense
许可证SSPL / ELv2(另有 AGPLv3 选项)Apache 2.0社区版 MITGPL-3.0
部署复杂度高(JVM、shard、replica)高(同 ES)低(单二进制)低(单二进制)
向量搜索一等公民(BBQ / ACORN)支持实验/有限支持(受内存限制)
聚合能力极强强弱弱
查询语言ES|QL / Query DSL无 ES|QL自有自有
资源占用大大小小(索引常驻内存)
适用规模中大型 + 分析中大型中小全文数据能装进内存

注意一个现实取舍:Typesense 的索引整体驻留内存,小数据集下极快,但数据集涨过可用内存就会变得昂贵;Meilisearch 社区版是单节点、用磁盘 + 内存映射,横向扩展要进企业版。所以「搜索 + 分析 + 向量」组合,ES 仍是当前最完整的开源方案;「纯搜索 + 数据不大」的轻量场景,才轮到另外两家。

七、起步建议

  1. 用 docker-compose 跑一个 3 节点集群:官方仓库有现成配置,3 节点足够验证 shard 分布与故障转移
  2. 先走通 semantic_text:声明字段 + 指定 inference_id,用它做 RAG 的向量召回;默认内置 multilingual-e5-small
  3. 量化配置在写入前定:向量字段的 index_options(如 bbq_hnsw)在 mapping 里定义,改 mapping 要重建索引,越早定越省事
  4. 新查询用 ES|QL:全文 / 语义 / 混合检索都能在一个管道里表达,老的 DSL 逐步迁移
  5. 生产环境保留默认安全配置:9.x 默认开 TLS + basic auth,别为了省事关掉
  6. 盯集群健康:/_cluster/health 看 status,yellow 通常是缺副本,red 是不可恢复

ES 持续出现在 Trending,本质是「稳定基础设施 + 9.x 主线演进」,不是某个爆款功能。它的演化值得跟,但它值不值得我们为自己业务引入,取决于你的场景是不是「检索 + 分析 + 向量」的混合负载——是,它很难替代;只是纯搜索,它可能过重了。


常见问题

Q:ES 还值得学吗?现在上新版本会不会很快过时? A:9.x 是持续演进的主线,每代有文档化的 breaking change。7.x 已 EOL,新项目直接上当前主线即可,不存在「刚学就过时」的问题。

Q:跑向量检索一定要 GPU 吗? A:不一定。检索本身 CPU 就能跑,BBQ 量化把内存压到约 1/32,普通机器也能做召回。GPU 的价值主要在 9.4 的 cuVS 加速索引构建,以及大规模向量写入时才显著。

Q:semantic_text 默认用哪个 embedding 模型? A:默认内置的是 multilingual-e5-small 推理端点。如果你想换别的模型,通过 inference_id 指向自己托管或第三方的推理服务即可。

Q:ES 和 OpenSearch 到底怎么选? A:需要 ES 的 ES|QL、最新向量与列式指标能力,选 ES。如果团队在 7.10 fork 上已跑得很稳、又用不到这些新特性,留在 OpenSearch 也合理——但升级、跨能力迁移前必须逐项验证,两者的新特性并不自动对齐。

Q:单节点能直接上生产吗? A:不建议。3 节点起步,生产保留默认安全配置。单节点宕机时,分片没有冗余,且失去故障转移能力。

参与讨论

使用 GitHub 登录。欢迎补充事实、异议与实践。