通过交互式追问了解一个中间件
? 啥是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怎么使用
! 安装->索引管理->数据操作->搜索聚合->高级功能 这里可以具体可以参照网上
-
安装:docker run -d -p 9200:9200 elasticsearch:8.5.1
-
创建索引:PUT /products { "mappings": { ... } }
-
插入数据:POST /products/_doc/1 { "title": "手机" }
-
搜索:GET /products/_search { "query": { "match": { "title": "手机" } } }
? 你提到的这些操作都是基于http请求实现的吗
! 对,主要通过RESTful Http Api
? 我要一个项目中(Spring Boot)集成es,需要做哪些工作
! 依赖引入->Bean配置(客户端)->CUDR(JSON数据)
-
引入依赖:elasticsearch-rest-high-level-client
-
配置客户端Bean:连接地址、认证信息
-
实现CRUD:通过RestHighLevelClient操作索引和数据。