当前位置: 首页 > article >正文

Elasticsearch快速上手与深度进阶:一站式实战教程

目录

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:手动安装
  1. 下载 Elasticsearch 包:Download Elasticsearch | Elastic
  2. 解压并运行:
    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. 实战案例

案例:电商商品搜索
  1. 创建索引并定义映射:
    {
      "mappings": {
        "dynamic": false,
        "properties": {
          "title": {"type": "text"},
          "price": {"type": "float"},
          "category": {"type": "keyword"}
        }
      }
    }
    
  2. 插入商品数据:
    curl -X POST "localhost:9200/products/_doc" -d'
    {
      "title": "iPhone 14 Pro",
      "price": 9999.0,
      "category": "electronics"
    }'
    
  3. 全文搜索:
    {
      "query": {
        "match": {
          "title": "iPhone 14"
        }
      }
    }
    

建议结合实际项目场景深入练习,并关注官方更新以获取最新特性!


http://www.kler.cn/a/595837.html

相关文章:

  • 什么是ETL
  • 算法 | 优化算法比较
  • 自然语言处理|深入解析 PEGASUS:从原理到实践
  • 字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破
  • 6.5840 Lab 3: Raft
  • react 常用插件
  • 暂存合并分支
  • 【机器学习-模型评估】
  • 老旧中控系统智能化改造方案:基于巨控OPC561Q-C模块实现多通道实时报警
  • 【css酷炫效果】纯CSS实现全屏万花筒效果
  • 八股文MYSQL
  • Centos7部署学之思考试系统
  • 新书速览|云原生Kubernetes自动化运维实践
  • 解决 uniapp 开发中权限申请同步告知目的问题| 华为应用商店上架审核问题解决
  • 初始EBP和ESP的设置
  • Android Compose 图像修饰深度解析(八)
  • 使用Python轻松拆分PDF,每页独立成文件
  • (一)丶Windows安装RabbitMQ可能会遇到的问题
  • JavaScript性能优化实战:深入探讨性能瓶颈与优化技巧
  • STM32 SPI总线驱动CH376T实现U盘/TF卡读写全解析—CH376数据手册分析(中上) | 零基础入门STM32第七十三步