搜索百科(3):Elasticsearch — 搜索界的“流量明星”
大家好,我是 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 的沖突及隨之而來的開源協議變更。

- 早期:Apache 2.0 協議
2010 年 Shay Banon 開源 Elasticsearch 時,最初采用的是 Apache 2.0 協議。Apache 2.0 屬于寬松的自由協議,允許任何人免費使用、修改和商用(包括 SaaS 模式)。這幫助 Elasticsearch 快速壯大,成為事實上的“搜索引擎標準”。
- 協議變更:應對云廠商“白嫖”
隨著 Elasticsearch 的流行,像 AWS(Amazon Web Services) 等云廠商直接將 Elasticsearch 做成托管服務,并從中獲利。Elastic 公司認為這損害了他們的商業利益,因為云廠商“用開源賺錢,卻沒有回饋社區”。2021 年 1 月,Elastic 宣布 Elasticsearch 和 Kibana 不再采用 Apache 2.0,改為 雙重協議:SSPL + Elastic License。這一步導致社區巨大分裂,AWS 帶頭將 Elasticsearch 分叉為 OpenSearch,并繼續以 Apache 2.0 協議維護。
- 再次轉向開源:AGPL v3
2024 年 3 月,Elastic 宣布新的版本(Elasticsearch 8.13 起)又新增 AGPL v3 作為一個開源許可選項。AGPL v3 既符合 OSI 真正開源標準,又能約束云廠商閉源托管服務,同時修復社區關系,Elastic 希望通過重新擁抱開源,減少分裂,吸引開發者回歸。
Elasticsearch 從寬松到收緊,再到回歸開源,是在社區生態與商業利益間尋找平衡的過程。
基本概念
要學習 Elasticsearch,得先了解其五大基本概覽:集群、節點、分片、索引和文檔。
- 集群(Cluster)
由一個或多個節點組成的整體,提供統一的搜索與存儲服務。對外看起來像一個單一系統。
- 節點(Node)
集群中的一臺服務器實例。節點有不同角色:
- Master 節點:負責集群管理(分片分配、元數據維護)。
- Data 節點:存儲數據、處理搜索和聚合。
- Coordinating 節點:接收請求并調度任務。
- Ingest 節點:負責數據寫入前的預處理。
- 索引(Index)
類似于傳統數據庫的“庫”,按邏輯組織數據。一個索引往往對應一個業務場景(如日志、商品信息)。
- 分片(Shard)
為了讓索引能水平擴展,Elasticsearch 會把索引拆分為多個 主分片,并為每個主分片創建 副本分片,提升高可用和查詢性能。
- 文檔(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 的詳細對比。如果您有特別關注的問題,歡迎提前提出!
?? 三連互動
- 你或公司最近在用 Elasticsearch 嗎?拿來做了什么場景?
- 在 Elasticsearch 和 OpenSearch 之間做過技術選型?
- 對 Elasticsearch 的許可證變化有什么看法?
對搜索技術感興趣的朋友,歡迎關注《搜索百科》專欄,一起探討與學習!
? 推薦閱讀
?? 參考
原文:https://infinilabs.cn/blog/2025/search-wiki-3-elasticsearch/
浙公網安備 33010602011771號