Bootstrap

人格分裂(交互问答)-小白想懂Elasticsearch

通过交互式追问了解一个中间件


? 啥是Elasticsearch

! 分布式搜索和分析引擎

? 为啥是分布式搜索,单体难道用不了吗

? 实际上是说这个东西可以分布式部署

! 单机可用但扩展性差,分布式通过分片、副本和负载均衡实现海量数据存储与高并发处理

? 提到集群,这里分布式到底是集群还是分布式

! Elasticsearch的分布式是通过集群实现的,分布式是设计理念,集群是实现方式(目标和手段)

? 那集群到底是什么,是一样状态的节点吗

! 不是的,实际上是很多不同节点相互联系形成一个集群(状态同步的逻辑整体)

? 明明是不一样的分片,为什么分片丢失还能恢复

! Minio: 数学,可以使用剩余分片推理出丢失分片的信息;而Elasticsearch是通过主副分片

! 也就是说对于Elasticsearch这种,如果主分片和副分片同时丢失,数据丢失;对于Minio,若分片丢失数超过纠错码容量阈值,永久丢失(就像4个分片,相当于四个变量,纠错码比作是两个方程,对于则由任意两个变量就可以解出剩下的变量)

! 那也就是说,对于这种集群部署,数据配合的实现方式是多样的,要根据需求来设定

? 进入正题,为什么Elasticsearch比正常的检索快

! 倒排索引: 输入关键词->在词典中定位词项(哈希或二分)->获取到倒排列表->返回匹配文档 O(1) ;分布式并行计算;列式存储+缓存...

? 啥叫列式存储,解释一下

? 也就是说Mysql这种关系型数据库是行式存储,Elasticsearch是列式存储吗

! Mysql只是行式存储( 专注于强一致的事务处理),es只是在特定情况下才采用列式存储存储,其实是行式(_source->实现CRUD)和列式(Doc Values->排序聚合)混合状态,并使用倒排索引加速全文搜索

? _source字段和Doc Values在es里代表了什么东西

! _source字段: 原始json文档(完整数据行);Doc Values: 单个字段的列数据行(分析引擎)

? 讲讲es怎么使用

! 安装->索引管理->数据操作->搜索聚合->高级功能 这里可以具体可以参照网上

 1. 安装:docker run -d -p 9200:9200 elasticsearch:8.5.1

 2. 创建索引:PUT /products { "mappings": { ... } }

 3. 插入数据:POST /products/_doc/1 { "title": "手机" }

 4. 搜索:GET /products/_search { "query": { "match": { "title": "手机" } } }

? 你提到的这些操作都是基于http请求实现的吗

! 对,主要通过RESTful Http Api

? 我要一个项目中(Spring Boot)集成es,需要做哪些工作

! 依赖引入->Bean配置(客户端)->CUDR(JSON数据)

 1. 引入依赖:elasticsearch-rest-high-level-client

 2. 配置客户端Bean:连接地址、认证信息

 3. 实现CRUD:通过RestHighLevelClient操作索引和数据。

;