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

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"
        }
      }
    }
    

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

相关文章:

  • 区块链技术在供应链管理中的应用与创新
  • istio 介绍-01-一个用于连接、管理和保护微服务的开放平台 概览
  • 如何在MCU工程中启用HardFault硬错误中断
  • AI提示词优化方法
  • Redis项目:缓存
  • OpenHarmony 开源鸿蒙北向开发——hdc工具安装
  • 大模型——让Word插上AI的翅膀:如何把DeepSeek装进Word
  • 右键添加:新建HTML模板文件
  • Form表单的三种提交和http请求的三种传参方式,以及Servlet里的取取参方式
  • 浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
  • 温度(Temperature)在大模型输出中的作用与底层原理
  • epoll成员函数介绍
  • 伯努利分布和二项分布学习笔记
  • 线程的概念
  • 跟我学C++中级篇——std::not_fn
  • 消息队列MQ
  • 【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)
  • 使用位置控件
  • 自动化测试定位元素方法成功率排行
  • PicGo安装与配置-Gitee图床
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 趣看 | 五一黄金周:你拍风景,拍风景的人在拍你
  • 世界羽联主席巴达玛:中国组织赛事的能力无与伦比
  • 想要“逆转”糖尿病,减少这两处脂肪是关键
  • 上海成五一国内最热门的入境游目的地,国际消费明显提升
  • 申活观察|人潮涌动成常态,豫园为何常来常新?