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

Elasticsearch 学习笔记

一套基于 Lucene 构建的分布式搜索引擎,支持全文检索、结构化数据查询、聚合分析等,是 ELK(Elasticsearch + Logstash + Kibana)技术栈的核心组件。


一、Elasticsearch 基础概念

1. 什么是 Elasticsearch?

  • 开源的、分布式、RESTful 风格的搜索与分析引擎;
  • 基于 Lucene,具备高可扩展性、实时检索与分析能力;
  • 可用于日志分析、电商搜索、推荐系统、数据监控等场景。

2. 核心术语

名称说明
Cluster一个或多个节点组成的集合,具有统一的名称
Node集群中的一个实例(Java 进程)
Index类似数据库中的数据库(DB),文档的逻辑集合
Document一条数据记录,JSON 格式
Type(已废弃)曾用于区分不同文档类型
Shard索引的物理分片,用于分布式存储
Replica主分片的副本,提高容错能力

二、安装与启动

1. Docker 安装

docker pull elasticsearch:8.12.0
docker run -d --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.12.0

访问:http://localhost:9200


三、索引操作

1. 创建索引

PUT /my_index

带映射(mapping)和设置:

PUT /products
{"settings": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "double" },"tags": { "type": "keyword" }}}
}

2. 删除索引

DELETE /my_index

3. 查看所有索引

GET /_cat/indices?v

四、文档操作

1. 插入文档(自动生成 ID)

POST /products/_doc
{"name": "iPhone 15","price": 7999,"tags": ["apple", "smartphone"]
}

2. 按 ID 获取文档

GET /products/_doc/1

3. 更新文档

POST /products/_update/1
{"doc": {"price": 7499}
}

4. 删除文档

DELETE /products/_doc/1

五、搜索查询(Query DSL)

1. 基本全文匹配

GET /products/_search
{"query": {"match": {"name": "iPhone"}}
}

2. 精确匹配

GET /products/_search
{"query": {"term": {"tags": "apple"}}
}

3. 布尔组合查询

GET /products/_search
{"query": {"bool": {"must": [{ "match": { "name": "iPhone" }},{ "range": { "price": { "lt": 8000 }}}]}}
}

六、聚合(Aggregations)

GET /products/_search
{"size": 0,"aggs": {"avg_price": {"avg": {"field": "price"}}}
}

七、Mapping 映射与字段类型

常用字段类型:

类型说明
text支持分词、全文搜索
keyword不分词,适合标签、枚举值
integer整数
float浮点数
date日期
boolean布尔值

八、分词器与分析器

示例:查看分析效果

GET /_analyze
{"analyzer": "standard","text": "Elasticsearch is amazing!"
}

返回结果为一组 token(分词结果)。


九、性能优化建议

  • 减少索引数量(Index 不宜太多);
  • 合理设置分片数量(Shard ≠ 越多越好);
  • keyword 替代 text 进行结构化查询;
  • 使用 filter 替代 must 可复用缓存;
  • 使用聚合时设置 size: 0 减少返回数据量。

十、常用命令速查表

操作命令
创建索引PUT /index
删除索引DELETE /index
插入文档POST /index/_doc
获取文档GET /index/_doc/id
更新文档POST /index/_update/id
删除文档DELETE /index/_doc/id
搜索GET /index/_search
查看所有索引GET /_cat/indices?v
分析文本GET /_analyze

十一、实用工具与插件

  • Kibana:可视化界面,调试查询语句,实时监控;
  • Postman:用于调试 API 请求;
  • Elasticdump:备份与迁移索引数据的命令行工具;
  • Head 插件(Chrome):轻量级管理界面。

十二、应用场景

  • 日志检索:搭配 Logstash + Beats,快速日志搜索;
  • 电商搜索:支持高性能商品搜索、自动补全;
  • 实时数据分析:替代传统 BI 报表;
  • 推荐系统:结合用户行为分析做个性推荐;
  • 智能问答:基于内容索引匹配相似问题。
http://www.xdnf.cn/news/16062.html

相关文章:

  • 使用react编写一个简单的井字棋游戏
  • nodejs模块化
  • JS WebAPIs DOM节点概述
  • 前端_Javascript复习
  • C语言:第11天笔记
  • Python通关秘籍(四)数据结构——列表
  • 力扣 hot100 Day52
  • 网络基础DAY16-MSTP-VRRP
  • 2025 年最新 AI 技术:全景洞察与深度解析​
  • 02-netty基础-java四种IO模型
  • 深入解析 Spark:关键问题与答案汇总
  • 【Spring拦截器实战】路径拦截与访问控制系统设计
  • 期货配资软件开发注意事项?
  • Linux文件——文件系统Ext2(1)_理解硬件
  • Java (Spring AI) 实现MCP server实现数据库的智能问答
  • 2️⃣tuple(元组)速查表
  • 从“点状用例”到“质量生态”:现代软件测试的演进、困局与破局
  • vscode不识别vsix结尾的插件怎么解决?
  • 应用层攻防启示录:HTTP/HTTPS攻击的精准拦截之道
  • Datawhale AI 夏令营-心理健康Agent开发学习-Task1
  • MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果
  • 【OpenCV篇】OpenCV——01day.图像基础
  • 漫画版:细说金仓数据库
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测
  • 面试高频题 力扣 LCR 130.衣柜整理 洪水灌溉(FloodFill) 深度优先遍历(dfs) 暴力搜索 C++解题思路 每日一题
  • PACKET_HOST等宏定义介绍
  • 目标检测系列(六)labelstudio实现自动化标注
  • YOLO-实例分割头
  • 使用vue-pdf-embed发现某些文件不显示内容
  • 能协调控制器的硬件与软件组成及解决方案