当前位置: 首页 > 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"
        }
      }
    }
    

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

http://www.dtcms.com/a/82152.html

相关文章:

  • 区块链技术在供应链管理中的应用与创新
  • 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图床
  • AI工具如何改变编程学习?Trae IDE与Claude 3.5的实践案例
  • JDK 24 发布,新特性解读!
  • 用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
  • STM32F4与串口屏通信
  • C++项目——内存池
  • dockerSDK-Go语言实现
  • dfs刷题排列问题 + 子集问题 + 组和问题总结
  • 【Java SE】单例设计模式
  • TNNLS 2024 | 基于残差超密集网络的高光谱图像空间光谱融合方法
  • 【Java基础】在Java中,一个线程的大小(即线程所占用的内存)是多少