目錄
1. Elasticsearch 簡介
2. 安裝與啟動
方式 1:Docker 快速安裝(推薦)
方式 2:手動安裝
3. 基礎操作
3.1 創建索引
3.2 插入文檔
3.3 查詢文檔
3.4 更新文檔
3.5 刪除文檔
4. 高級查詢
4.1 布爾查詢
4.2 范圍查詢
4.3 通配符查詢
5. 聚合分析
5.1 統計年齡分布
5.2 計算平均值
6. 自定義分析器
6.1 創建分詞器
6.2 應用分析器到索引
7. 集群管理
7.1 啟用集群發現
7.2 添加節點
8. 安全配置(基礎)
8.1 生成證書
8.2 創建用戶
8.3 啟用 HTTPS
9. 性能優化
9.1 索引優化
9.2 冷熱架構
10. 實戰案例
案例:電商商品搜索
Elasticsearch 的分步教程,涵蓋從基礎到進階的核心內容,適合快速上手和實踐。
1. Elasticsearch 簡介
- 是什么:基于 Lucene 的分布式搜索和分析引擎,支持全文搜索、結構化搜索、聚合分析。
- 核心概念:
- 索引(Index):類似數據庫的表,存儲文檔的集合。
- 文檔(Document):JSON 格式的數據條目,類似數據庫中的行。
- 類型(Type,7.x+ 已棄用):曾用于區分文檔結構,現統一為?
_doc
。 - 分片(Shard):索引拆分的子單元,分布式存儲和并行處理。
- 副本(Replica):分片的備份,提高可用性和容錯性。
2. 安裝與啟動
方式 1:Docker 快速安裝(推薦)
# 拉取 Elasticsearch 鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.0# 啟動容器(默認端口 9200)
docker run -d --name es -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:7.16.0
方式 2:手動安裝
- 下載 Elasticsearch 包:Download Elasticsearch | Elastic
- 解壓并運行:
cd elasticsearch-7.16.0 bin/elasticsearch
3. 基礎操作
3.1 創建索引
# 創建名為 "users" 的索引
curl -X PUT "localhost:9200/users"
3.2 插入文檔
# 插入一條用戶數據
curl -X POST "localhost:9200/users/_doc" -H 'Content-Type: application/json' -d'
{"name": "張三","age": 30,"email": "zhangsan@example.com"
}'
3.3 查詢文檔
# 查找所有文檔
curl -X GET "localhost:9200/users/_doc/_search?pretty"# 根據 ID 查詢
curl -X GET "localhost:9200/users/_doc/1?pretty"
3.4 更新文檔
curl -X POST "localhost:9200/users/_doc/1/_update" -H 'Content-Type: application/json' -d'
{"doc": {"age": 31}
}'
3.5 刪除文檔
curl -X DELETE "localhost:9200/users/_doc/1"
4. 高級查詢
4.1 布爾查詢
{"query": {"bool": {"must": [{"match": {"name": "張三"}}],"filter": [{"range": {"age": {"gte": 25}}}]}}
}
4.2 范圍查詢
{"query": {"range": {"age": {"gte": 20,"lte": 30}}}
}
4.3 通配符查詢
{"query": {"wildcard": {"email": "*example.com"}}
}
5. 聚合分析
5.1 統計年齡分布
{"aggs": {"age_distribution": {"histogram": {"field": "age","interval": 10}}}
}
5.2 計算平均值
{"aggs": {"average_age": {"avg": {"field": "age"}}}
}
6. 自定義分析器
6.1 創建分詞器
{"analysis": {"analyzer": {"custom_keyword": {"type": "keyword","tokenizer": "keyword"}}}
}
6.2 應用分析器到索引
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{"settings": {"analysis": {"analyzer": {"default_search": {"type": "standard"},"default_index": {"type": "custom_keyword"}}}}
}'
7. 集群管理
7.1 啟用集群發現
編輯?elasticsearch.yml
:
cluster.name: my-es-cluster
node.name: node-1
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1:9300"]
7.2 添加節點
在另一臺機器啟動 Elasticsearch 并配置相同?cluster.name
,節點會自動加入集群。
8. 安全配置(基礎)
8.1 生成證書
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
8.2 創建用戶
bin/elasticsearch-users useradd es_admin -p admin123 -r superuser
8.3 啟用 HTTPS
編輯?elasticsearch.yml
:
xpack.security.enabled: true
http.ssl.enabled: true
http.ssl.key: path/to/es-node.jks
9. 性能優化
9.1 索引優化
# 強制合并分段
curl -X POST "localhost:9200/users/_forcemerge?max_num_segments=1"
9.2 冷熱架構
使用 ILM(Index Lifecycle Management)策略將數據遷移至冷存儲。
10. 實戰案例
案例:電商商品搜索
- 創建索引并定義映射:
{"mappings": {"dynamic": false,"properties": {"title": {"type": "text"},"price": {"type": "float"},"category": {"type": "keyword"}}} }
- 插入商品數據:
curl -X POST "localhost:9200/products/_doc" -d' {"title": "iPhone 14 Pro","price": 9999.0,"category": "electronics" }'
- 全文搜索:
{"query": {"match": {"title": "iPhone 14"}} }
建議結合實際項目場景深入練習,并關注官方更新以獲取最新特性!