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

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.lryc.cn/news/595989.html

相关文章:

  • Doxygen生成接口文档
  • Hadoop调度器深度解析:FairScheduler与CapacityScheduler的优化策略
  • 运维实战:100条常用SQL语句,涵盖基础查询、数据操作、表管理、索引视图、连接查询、子查询、日期处理、字符串操作等核心操作,建议收藏!
  • Android常用的adb和logcat命令
  • DOM/事件高级
  • ZooKeeper学习专栏(六):集群模式部署与解析
  • Java中内存屏障在volatile和sychronized的应用
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • 【Go语言-Day 23】接口的进阶之道:空接口、类型断言与 Type Switch 详解
  • TTL+日志的MDC实现简易链路追踪
  • 【从0-1的JavaScript】第2篇:JS对象的创建、使用已经内置对象
  • 操作系统 —— A / 概述
  • API网关原理与使用场景详解
  • Android AppCompat:实现Material Design向后兼容的终极指南
  • Apache Ignite扫描查询
  • 快手视觉算法面试30问全景精解
  • 2025 年非关系型数据库全面指南:类型、优势
  • Apache Ignite缓存基本操作
  • [Dify] -进阶10- Dify 的用户输入结构:变量、参数、文件上传全解析
  • 如何撤销Git提交误操作
  • 【音视频协议篇】RTMP协议
  • haproxy的负载均衡集群搭建
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • 最新AI与Python在地球科学多源数据交叉融合中的前沿技术应用
  • linux用户态各定时器抖动测试
  • 「Linux命令基础」用户组管理
  • MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果
  • stream流入门
  • 企业知识库软件选型与实践指南
  • LINUX 722 逻辑卷快照