Elasticsearch 入门指南
一、什么是 Elasticsearch?
Elasticsearch(简称 ES)是一个开源的分布式搜索引擎,专门用于:
- 快速搜索海量数据
- 分析日志和指标
- 实现智能搜索建议
- 处理地理位置搜索
🎯 核心优势:
- 速度快:百万级数据搜索仅需毫秒级响应
- 易扩展:支持水平扩展,轻松应对数据增长
- 简单易用:通过 RESTful API 操作
二、核心概念图解
1. 基本术语
| 概念 | 类比 | 说明 |
|---|---|---|
| 索引(Index) | 数据库 | 数据容器(如:products) |
| 文档(Document) | 表行 | 基本数据单位(JSON格式) |
| 字段(Field) | 表列 | 文档的属性(如:name, price) |
| 分片(Shard) | 分区 | 数据分割单元(提高并行能力) |
2. 与传统数据库对比
关系型数据库 数据库Database 表Table 行Row 列Column Elasticsearch 索引Index 文档Document 字段Field
三、快速安装(单机版)
- 下载 Elasticsearch(需 Java 环境):
bash
https://www.elastic.co/downloads/elasticsearch
- 解压并启动:
bash
tar -xzf elasticsearch-8.10.2-linux-x86_64.tar.gz
cd elasticsearch-8.10.2/bin
./elasticsearch
-
验证运行:
返回JSON信息表示成功!
四、基础操作入门
1. 创建索引(类似建表)
bash
# 创建商品索引
PUT /products
{
"settings": {
"number_of_shards": 1# 分片数(入门用1个即可)
},
"mappings": {
"properties": {
"name": {"type": "text"},
"price": {"type": "float"},
"category": {"type": "keyword"}
}
}
}
2. 添加文档(插入数据)
bash
# 添加一个商品
POST /products/_doc/1
{
"name": "无线蓝牙耳机",
"price": 299.0,
"category": "电子产品"
}
# 批量添加(推荐)
POST /products/_bulk
{"index":{}}
{"name":"运动水杯","price":89.9,"category":"生活用品"}
{"index":{}}
{"name":"编程书籍","price":59.0,"category":"图书"}
3. 搜索文档
bash
# 简单搜索(查找所有)
GET /products/_search
# 条件搜索(查找价格低于100的商品)
GET /products/_search
{
"query": {
"range": {
"price": {"lte": 100}
}
}
}
五、实战案例:商品搜索系统
场景需求
- 支持商品名称模糊搜索
- 按价格范围过滤
- 按分类筛选
1. 创建增强版商品索引
bash
PUT /shop_products
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_smart"# 中文分词
},
"price": {"type": "float"},
"category": {"type": "keyword"}, # 精确匹配
"stock": {"type": "integer"}
}
}
}
2. 添加测试数据
bash
POST /shop_products/_bulk
{"index":{}}
{"name":"Apple iPhone 14","price":5999,"category":"手机","stock":100}
{"index":{}}
{"name":"华为MateBook笔记本","price":6899,"category":"电脑","stock":50}
{"index":{}}
{"name":"小米蓝牙音箱","price":199,"category":"数码配件","stock":200}
{"index":{}}
{"name":"耐克运动鞋","price":899,"category":"鞋服","stock":80}
3. 实现综合搜索
bash
GET /shop_products/_search
{
"query": {
"bool": {
"must": [
{"match": {"name": "蓝牙"}}# 名称包含"蓝牙"
],
"filter": [
{"range": {"price": {"gte": 100, "lte": 500}}}, # 价格100-500
{"term": {"category": "数码配件"}}# 分类精确匹配
]
}
}
}
4. 搜索结果解析
json
{
"took": 15,// 耗时15毫秒
"hits": {
"total": {
"value": 1,// 找到1个匹配商品
"relation": "eq"
},
"hits": [
{
"_source": {
"name": "小米蓝牙音箱",
"price": 199,
"category": "数码配件",
"stock": 200
}
}
]
}
}
六、常见使用场景
- 网站搜索
bash
GET /articles/_search
{
"query": {"match": {"content": "人工智能"}}
}
- 日志分析
bash
# 统计错误日志数量
GET /app-logs/_search
{
"query": {"term": {"level": "ERROR"}},
"size": 0# 不返回具体文档
}
- 自动补全
bash
GET /products/_search
{
"suggest": {
"product_suggestion": {
"prefix": "蓝",
"completion": {"field": "name_suggest"}
}
}
}
七、学习路径建议
- 掌握基础操作(CRUD+搜索)
- 理解分词器(中文用 ik 插件)
- 学习组合查询(bool 查询)
- 探索聚合分析(统计计算)
- 部署集群生产环境
💡 新手提示:
- 从单机版开始学习
- 使用 Kibana 控制台操作(更直观)
- 实际项目从简单搜索开始
- 官方文档是最好的学习资源
Elasticsearch 是现代应用必备的搜索技术,通过本文案例您已掌握基础操作。下一步可以尝试部署实际项目,体验其强大的搜索分析能力!