Stories

Detail Return Return

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

大家好,我是 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/
user avatar kk_470661 Avatar huifeideniao Avatar tugraph Avatar yinguan_chen Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.