Elasticsearch 常用语法手册
🧰 Elasticsearch 常用语法手册
📚 目录
- 索引操作
- 文档操作
- 查询操作
- 聚合查询
- 健康与状态查看
- 常见问题与注意事项
🔹 索引操作
查询全部索引
GET _search
创建索引
PUT /es_db
创建索引并设置分片数和副本数
PUT /es_db
{"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}
查询索引是否存在
HEAD /es_db
查询索引详情
GET /es_db
删除索引
DELETE /es_db
修改索引配置(如副本数)
PUT /es_db/_settings
{"index": {"number_of_replicas": 1}
}
添加 IK 分词器
PUT /es_db
{"settings": {"index.analysis.analyzer.default.type": "ik_max_word"}
}
🔹 文档操作
添加文档
PUT /es_db/_doc/1
{"name": "张三","age": 10,"address": "深圳市宝安区海谷科技大厦"
}
查询文档
GET /es_db/_search
局部更新文档
POST /es_db/_update/5
{"doc": {"age": 22}
}
删除文档
DELETE /es_db/_doc/5
🔹 查询操作
条件查询(match)
GET /es_db/_search
{"from": 0,"size": 20,"query": {"match": {"name": "张三"}}
}
条件查询(q 参数)
GET /es_db/_search?q=name:庆
短语匹配查询(match_phrase)
POST /es_db/_search
{"query": {"match_phrase": {"name": "张三"}}
}
使用过滤器查询(post_filter)
GET /es_db/_search
{"query": {"match_all": {}},"post_filter": {"range": {"age": {"gte": 10,"lte": 20}}}
}
高亮显示
POST /es_db/_search
{"query": {"match_phrase": {"name": "张三"}},"highlight": {"fields": {"name": {}}}
}
🔹 聚合查询
terms 聚合(按字段统计)
GET /es_db/_search
{"query": { "match_all": {} },"aggs": {"name": {"terms": {"field": "address.keyword"}}}
}
⚠️ 注意:
text
类型字段不能直接用于聚合,需使用.keyword
子字段或开启fielddata=true
(占用较多内存)
avg 聚合(求平均值)
GET /es_db/_search
{"query": { "match_all": {} },"aggs": {"name": {"avg": {"field": "age"}}}
}
🔹 健康与状态查看
查看集群健康状态
GET _cat/health
查看索引情况
GET _cat/indices?v
❗ 常见问题与注意事项
text vs keyword
text
类型适合全文搜索,会进行分词。keyword
类型不会分词,适合精确匹配、排序、聚合等操作。- 如果需要对
text
字段进行排序或聚合,可以:- 使用
.keyword
子字段; - 或在映射中设置
"fielddata": true
,但注意内存消耗较大。
- 使用
示例字段映射
PUT /es_db
{"mappings": {"properties": {"address": {"type": "text","fields": {"keyword": { "type": "keyword" }}}}}
}
排序 + 分页查询示例
GET /es_db/_search
{"from": 0,"size": 10,"query": {"bool": {"must": [{ "match": { "name": "张三" } }],"filter": [{ "range": { "age": { "gte": 18 } } }]}},"sort": [{ "createTime": "desc" }]
}