Elasticsearch 是一个分布式搜索和分析引擎,广泛用于日志管理、全文搜索和数据分析等场景。以下是一个详细的使用指南,包括安装、配置、基本操作和常见用法。


1. 安装 Elasticsearch

方法 1:使用 Docker 安装

这是最简便的方式,适合开发和测试环境。

启动单节点

  1. 创建一个 docker-compose.yml 文件:
    yaml
    version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.6.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false # 可禁用安全功能(仅限开发环境) ports: - "9200:9200"
  2. 启动 Elasticsearch:
    bash
    docker-compose up -d
  3. 验证是否启动成功:
    bash
    curl -X GET "http://localhost:9200"

启动集群

对于多节点集群,可定义多个服务并配置 discovery.seed_hostscluster.name


方法 2:手动安装

  1. 下载并解压
  2. 启动 Elasticsearch
    bash
    ./bin/elasticsearch
  3. 验证服务是否运行
    bash
    curl -X GET "http://localhost:9200"

2. 基本概念

核心概念

  1. 索引(Index):类似于数据库中的表,用于存储相关数据的集合。
  2. 文档(Document):类似于数据库中的一行,存储实际的数据(JSON 格式)。
  3. 分片(Shard):索引分为多个分片存储在不同的节点上。
  4. 副本(Replica):分片的副本,用于高可用性。

3. 基本操作

1. 创建索引

使用 PUT 请求创建一个索引:

bash
curl -X PUT "http://localhost:9200/my_index"

带有映射(Mapping)的索引:

bash
curl -X PUT "http://localhost:9200/my_index" -H "Content-Type: application/json" -d '{ "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" }, "created_at": { "type": "date" } } } }'

2. 添加文档

使用 POSTPUT 方法添加文档:

bash
curl -X POST "http://localhost:9200/my_index/_doc" -H "Content-Type: application/json" -d '{ "name": "John Doe", "age": 30, "created_at": "2024-12-01" }'

3. 查询文档

查询所有文档

bash
curl -X GET "http://localhost:9200/my_index/_search?pretty"

条件查询

按条件查询(如名字为 John):

bash
curl -X GET "http://localhost:9200/my_index/_search" -H "Content-Type: application/json" -d '{ "query": { "match": { "name": "John" } } }'

分页查询

分页返回前 10 条:

bash
curl -X GET "http://localhost:9200/my_index/_search?size=10&from=0"

4. 更新文档

部分更新:

bash
curl -X POST "http://localhost:9200/my_index/_update/1" -H "Content-Type: application/json" -d '{ "doc": { "age": 31 } }'

5. 删除文档

删除特定文档:

bash
curl -X DELETE "http://localhost:9200/my_index/_doc/1"

删除索引:

bash
curl -X DELETE "http://localhost:9200/my_index"

4. 高级操作

1. 聚合查询

聚合计算平均年龄:

bash
curl -X GET "http://localhost:9200/my_index/_search" -H "Content-Type: application/json" -d '{ "size": 0, "aggs": { "average_age": { "avg": { "field": "age" } } } }'

2. 全文搜索

模糊搜索 name 字段包含 jo 的文档:

bash
curl -X GET "http://localhost:9200/my_index/_search" -H "Content-Type: application/json" -d '{ "query": { "fuzzy": { "name": { "value": "jo" } } } }'

3. 索引备份和恢复

创建快照仓库

bash
curl -X PUT "http://localhost:9200/_snapshot/my_backup" -H "Content-Type: application/json" -d '{ "type": "fs", "settings": { "location": "/mnt/backups", "compress": true } }'

备份索引

bash
curl -X PUT "http://localhost:9200/_snapshot/my_backup/snapshot_1" -H "Content-Type: application/json" -d '{ "indices": "my_index", "include_global_state": false }'

恢复索引

bash
curl -X POST "http://localhost:9200/_snapshot/my_backup/snapshot_1/_restore"

5. 日常运维

1. 检查集群状态

bash
curl -X GET "http://localhost:9200/_cluster/health?pretty"

2. 查看节点信息

bash
curl -X GET "http://localhost:9200/_cat/nodes?v"

3. 查看分片状态

bash
curl -X GET "http://localhost:9200/_cat/shards?v"

6. 常见问题

  1. 内存不足:确保分配足够的 JVM 内存(config/jvm.options)。
  2. 分片过多:优化分片数量,避免每个节点有过多的小分片。
  3. 磁盘空间不足:定期清理过期数据或增加存储容量。

通过这些步骤,您可以快速上手 Elasticsearch,并应用于日志分析、全文搜索或数据分析场景。

点赞(368) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部