Elasticsearch的用法
Elasticsearch 是一款功能强大的分布式搜索与分析引擎,广泛应用于全文检索、日志分析、实时监控等场景。以下是其核心用法及操作指南:
一、基础概念与安装配置
- 1.
核心概念
- •
索引(Index):类似数据库中的表,存储结构化或非结构化数据,支持分片(Shard)和副本(Replica)机制以提高扩展性和容灾性。
- •
网页(Document):以 JSON 格式存储的单条数据记录,通过唯一 ID 标识。
- •
映射(Mapping):定义字段类型(如
text、keyword、date)及分词规则,优化搜索性能。
- •
- 2.
安装与启动
- •
下载并解压 Elasticsearch,修改配置文件
elasticsearch.yml(如集群名称、节点名称)。 - •
通过命令行启动服务:
./bin/elasticsearch,默认端口为9200。
- •
二、网页操作
- 1.
新增网页
- •
指定 ID 插入:
POST /my_index/_doc/1 {"title": "Elasticsearch 教程","content": "基于 Lucene 的搜索服务器..." } - •
自动生成 ID:
POST /my_index/_doc {"title": "另一篇教程" }
- •
- 2.
查询网页
- •
按 ID 查询:
GET /my_index/_doc/1 - •
条件查询(如范围、模糊匹配):
GET /my_index/_search {"query": {"range": {"price": {"gte": 100, "lte": 500}},"wildcard": {"title": "*Elastic*"}} }
- •
- 3.
更新与删除
- •
更新部分字段:
POST /my_index/_update/1 {"doc": {"title": "更新后的标题"} } - •
批量操作:
POST /my_index/_bulk {"index": {}} {"title": "网页1"} {"index": {}} {"title": "网页2"}
- •
三、搜索与查询
- 1.
全文检索
- •
使用
match查询分词后的文本内容:GET /my_index/_search {"query": {"match": {"content": "Elasticsearch 教程"}} } - •
精确匹配使用
term查询(适用于keyword类型字段):{"term": {"status": "active"}}
- •
- 2.
复杂查询
- •
布尔组合查询(
must、should、must_not):{"bool": {"must": [{"match": {"title": "Elasticsearch"}}, {"range": {"date": {"gte": "2025-01-01"}}}]}} - •
多字段查询(
multi_match):{"multi_match": {"query": "搜索词", "fields": ["title", "content"]}}
- •
- 3.
高亮与排序
- •
高亮匹配关键词:
{"highlight": {"fields": {"content": {}}}} - •
按字段排序:
{"sort": [{"price": {"order": "desc"}}]}
- •
四、聚合分析
- 1.
桶聚合(Bucket Aggregations)
- •
按字段值分组(如统计不同年龄的用户数):
{"aggs": {"ages": {"terms": {"field": "age"}}}}
- •
- 2.
度量聚合(Metric Aggregations)
- •
计算平均值、总和等:
{"aggs": {"avg_price": {"avg": {"field": "price"}}}}
- •
- 3.
嵌套聚合
- •
在桶聚合内嵌套度量聚合(如每个性别下的平均收入):
{"aggs": {"genders": {"terms": {"field": "gender"}}, "avg_income": {"avg": {"field": "income"}}}}
- •
五、索引管理与优化
- 1.
映射优化
- •
动态映射与静态映射结合,避免字段类型错误:
PUT /my_index {"mappings": {"properties": {"price": {"type": "double"}}} }
- •
- 2.
分片与副本调整
- •
创建索引时指定分片数和副本数:
{"settings": {"number_of_shards": 3, "number_of_replicas": 1}}
- •
- 3.
索引迁移与重建
- •
使用
_reindexAPI 迁移数据:POST /_reindex {"source": {"index": "old_index"}, "dest": {"index": "new_index"}}
- •
六、集群管理与监控
- 1.
集群健康检查
- •
查看集群状态:
GET /_cluster/health?pretty
- •
- 2.
节点与分片监控
- •
通过
GET _cat/shards?v查看分片分布,优化资源分配。
- •
- 3.
安全配置
- •
启用身份验证(如 X-Pack)及 HTTPS 加密。
- •
七、进阶技巧
- •
分词器配置:使用 IK 分词器处理中文文本,支持自定义词典和停用词。
- •
别名操作:动态切换索引别名以实现无缝索引更新:
POST /_aliases {"actions": [{"remove": {"index": "old", "alias": "alias"}}, {"add": {"index": "new", "alias": "alias"}}]} - •
脚本更新:通过 Painless 脚本批量修改字段值。
以上为 Elasticsearch 的核心用法,实际应用中需结合具体场景调整索引策略、查询逻辑及性能优化方案。更多细节可参考官方网页或搜索结果中的实战案例。
