ElasticSearch笔记记录

一、Elasticsearch的倒排索引

传统的检索是通过文章,逐个遍历找到对应关键词的位置。 这样就很慢。
ES 的倒排索引的可以理解为标签,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引
在这里插入图片描述
倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构
1、 空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;
2、 查询速度快。O(len(str))的查询时间复杂度。

二、Elasticsearch 在部署时,对 Linux 的设置优化方法

**1、** 关闭缓存 swap;
**2、** 堆内存设置为:Min(节点内存/2, 32GB);
**3、** 设置最大文件句柄数;
**4、** 线程池+队列大小根据业务需要做调整;
**5、** 磁盘存储 raid 方式——存储有条件使用 RAID10,增加单节点性能以及避免单节点存储故障。

三、Elasticsearch索引文档的过程

在这里插入图片描述

第一步:客户写集群某节点写入数据,发送请求。(如果没有指定路由/协调节点,请求的节点扮演**路由节点**的角色。)

第二步:节点1接受到请求后,使用文档_id来确定文档属于分片0。请求会被转到另外的节点,假定节点3。因此分片0的主分片分配到节点3上。
**文档获取分片过程,借助路由算法获取,路由算法就是根据路由和文档id计算目标的分片id的过程。**

第三步:节点3在主分片上执行写操作,如果成功,则将请求并行转发到节点1和节点2的副本分片上,等待结果返回。所有的副本分片都报告成功,节点3将向协调节点(节点1)报告成功,节点1向请求客户端报告写入成功。

四、在并发情况下,Elasticsearch 如果保证读写一致

1、 可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;
2、 另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
3、 对于读操作,可以设置 replication 为 sync(默认),这使得操作在主分片和副本分片都完成后才会返回;如果设置 replication 为 async 时,也可以通过设置搜索请求参数_preference 为 primary 来查询主分片,确保文档是最新版本。

五、解释在 Elasticsearch 集群中添加或创建索引的过程

要添加新索引,应使用创建索引 API 选项。创建索引所需的参数是索引的配置Settings,索引中的字段 Mapping 以及索引别名 Alias。也可以通过模板 Template 创建索引。

六、安装 Elasticsearch 需要依赖组件

ES 早期版本需要JDK,在7.X版本后已经集成了 JDK,已无需第三方依赖。

七、如何使用 Elastic Reporting(收费)

Reporting API有助于将检索结果生成 PD F格式,图像 PNG 格式以及电子表格 CSV 格式的数据,并可根据需要进行共享或保存。

八、Elasticsearch 是如何实现 master 选举的

前置前提:
1、 只有候选主节点(master:true)的节点才能成为主节点。
2、 最小主节点数(min_master_nodes)的目的是防止脑裂。

核心入口为 findMaster,选择主节点成功返回对应 Master,否则返回 null。

选举流程大致描述如下:
第一步:确认候选主节点数达标,elasticsearch.yml 设置的值

discovery.zen.minimum_master_nodes;

第二步:比较:先判定是否具备 master 资格,具备候选主节点资格的优先返回;
若两节点都为候选主节点,则 id 小的值会主节点。
注意这里的 id 为 string 类型。
题外话:获取节点 id 的方法。

1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
2ip
port heapPercent heapMax id
name

十、Elasticsearch更新和删除文档的过程。

1、 删除和更新也都是写操作,但是Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更;
2、 磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。
3、 在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。

十一、Elasticsearch 索引数据多了,如何调优,部署

1 动态索引层面
基于模板+时间+rollover api滚动创建索引,举例:设计阶段定义:blog索引的模板格式为:blog_index_时间戳的形式,每天递增数据。这样做的好处:不至于数据量激增导致单个索引数据量非常大,接近于上线2的32次幂-1,索引存储达到了TB+甚至更大。一旦单个索引很大,存储等各种风险也随之而来,所以要提前考虑+及早避免。
2 存储层面
冷热数据分离存储,热数据(比如最近3天或者一周的数据),其余为冷数据。对于冷数据不会再写入新数据,可以考虑定期force_merge加shrink压缩操作,节省存储空间和检索效率。
3 部署层面
一旦之前没有规划,这里就属于应急策略。结合ES自身的支持动态扩展的特点,动态新增机器的方式可以缓解集群压力,注意:如果之前主节点等规划合理,不需要重启集群也能完成动态新增的。
其余基础
1.1合理的硬件配置
SSD (固态硬盘)比 STAT(机械硬盘) 查询效率快5-10 倍 写入差异不大,
如果查询较多 建议内存/硬盘配置为 1:10(SSD)
如果查询较少 建议内存/硬盘配置为 1:50(机械硬盘)
单节点存储数据建议在2TB以内 不要超过5TB

十二、Elasticsearch 支持哪些类型的查询

查询主要分为两种类型:精确匹配、全文检索匹配。
精确匹配,例如 term、exists、term set、 range、prefix、 ids、 wildcard、regexp、 fuzzy等。
全文检索,例如match、match_phrase、multi_match、match_phrase_prefix、query_string 等

十三、 Elasticsearch 有关的主要可用字段数据类型

1、字符串数据类型,包括支持全文检索的 text 类型 和 精准匹配的 keyword 类型。
2、数值数据类型,例如字节,短整数,长整数,浮点数,双精度数,half_float,scaled_float。
3、日期类型,日期纳秒Date nanoseconds,布尔值,二进制(Base64编码的字符串)等。
4、范围(整数范围 integer_range,长范围 long_range,双精度范围 double_range,浮动范围 float_range,日期范围 date_range)。
5、包含对象的复杂数据类型,nested 、Object。
6、GEO 地理位置相关类型。
7、特定类型如:数组(数组中的值应具有相同的数据类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值