elasticsearch总结

简介: ES 三大操作: 构建索引、检索数据、聚合数据 ES 特性: 分布式、倒排索引、近实时、相似精度 适用场景: 倒排索引可以为一个文档中每个term提供索引,特别适合解决由于查询条件组合场景过多,导致索引数量急剧膨胀的查询场景。

ES 三大操作:

构建索引、检索数据、聚合数据

ES 特性:

分布式、倒排索引、近实时、相似精度

适用场景:

    倒排索引可以为一个文档中每个term提供索引,特别适合解决由于查询条件组合场景过多,导致索引数量急剧膨胀的查询场景。

ES查询过程:

查询-合并过程
大致过程:master 接收请求,分发到shard查询,轮询shard查询结果,最后合并排序后返回。

举例:如果客户端需要2条数据,从小到大排序,master会向每个shard收集f2条数据,最终master会获得shardCount*pageSize条数据,shardCount是总分片数,pageSize是请求所需单页数据量。

分片:分片是对一个大数据索引的分割。分片数可以大于node集群节点数,集群节点数也可以大于分片数。一般有5个node节点,5个分片,会均匀分布到5个node节点上;如果有3个node节点,但是有5个分片,某些node节点上会存储多个分片。反之,分片数小于node节点数,可能是处于分片备份的考虑,比较浪费机器。一般分片数都会大于等于node节点数,预留一定的扩容空间。

routing功能:ES可以提供分片路由功能,如果不开启分片路由,收到查询请求的节点(暂且称为master)会广播查询请求到各个node节点,开启分片,只会像分片所在node节点发起查询请求。当然跨分片查询时有发生。

内存分配:官方建议物理内存50%预留,主要是文件缓存系统使用,缓存磁盘上的索引数据,减少磁盘IO,硬盘速度影响ES速度。剩余内存分配JVM大内存,如上ES查询需要开辟大量的缓存队列,及其消耗内存,内存不足时,OOM也是常有的事情。ES还有大量的缓存机制都是消耗内存的。

term缓存:缓存term到文档的映射

fiter缓存:缓存单一filter查询结果,缓存的粒度过大不利于命中,比如按照所有查询条件缓存,粒度过小,意义不大,对查询效率提高不明显。粒度过小可能已经接近索引本身粒度。

段合并:段合并主要是lucene索引段合并。lucene构建索引很有意思,在发生修改和删除操作时,通常不是直接修改和删除索引中对应数据,而是额外增加一个文件记录这部分修改。查询结果返回前,会根据这个文件删除已经删掉和修改的数据。修改过的数据所在的新的索引段文件,同样也会参与搜索,以此来保证修改后的最新数据参与搜索并返回。这种机制也带来一个问题,就是查询结果的不精确性。

注意事项:

    段合并是一个比较消耗资源的操作,除非你很清楚它的机制,否则不建议频繁手动发起,而是应该根据业务场景对数据实时性的要求权衡,通过配置,让ES自发的发起段合并。尽管段合并可能会带来查询效率提升,但是合并过程代价很大,要做出选择。

    ES不支持join操作,这对数据模型选择会造成一些干扰。通常建议,按照业务场景组织数据,数据尽量扁平化,消除join需求。扁平化对查询效率也是友好的,可评估的。

    内存分配:50%原则,文件系统缓存不应该被挤压。

    bulk操作:有时我们通过bulk操作以提高数据处理速度,但是bulk会占用大量资源,比如网卡IO,对bulk操作进行IO流量限制是一个不错的选择,同时应该让你的bulk操作尽可能的平稳,消除毛刺峰值。

    集群下打分:集群环境下,打分机制可能无法权衡所有分片的整体情况,而造成某些node节点打分失实的情况。用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。可能分片A中的最高分,放到分片B中只能处在中下排名,但是有时为了效率问题,这些公平性被抹杀。处理分片时,还是需要注意的,尽可能的减弱这种影响。

    使用索引别名:有助于重新索引以及在线升级

    避免发生swapping:vm.swappiness = 1 或 bootstrap.mlockall: true

    深度分页:先查后取的过程支持用 from 和 size 参数分页,但是这是 有限制的 。 要记住需要传递信息给协调节点的每个分片必须先创建一个 from + size 长度的队列,协调节点需要根据 number_of_shards * (from + size) 排序文档,来找到被包含在 size 里的文档。
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
数据可视化 API
低代码可视化工具-uniapp页面跳转传参-代码生成器
低代码可视化工具-uniapp页面跳转传参-代码生成器
512 2
|
存储 Linux
服务器数据恢复——使用fsck后Ext4文件系统挂载不上的数据恢复案例
关于Ext4文件系统的几个概念: 块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组结构基本上相同。 块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,主要描述块位图、i-节点位图及i-节点表的地址等信息。 超级块(Superblock):用于存储文件系统的配置参数(块大小、总块数、i-节点数等)和动态信息(当前空闲块数和i-节点数)。Ext4文件系统的超级块始于1024字节处,即2号扇区。 i节点:描述文件的时间、大小、块指针等信息。
|
存储 缓存 负载均衡
数据库分库分表常见算法
数据库分库分表常见算法
|
开发框架 前端开发 .NET
分享63个投票调查PHP源码,总有一款适合你
分享63个投票调查PHP源码,总有一款适合你
438 3
|
算法 API 数据中心
魔搭社区利用 NVIDIA TensorRT-LLM 加速开源大语言模型推理
魔搭社区于 2022 年 11 月初创建,首次在业界提出了 “模型即服务”( MaaS, Model as a Service)的理念。
|
应用服务中间件 nginx C++
nginx: [emerg] unknown directive “rtmp“ in ./../conf/nginx.conf:16
nginx: [emerg] unknown directive “rtmp“ in ./../conf/nginx.conf:16
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校实验室管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校实验室管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
154 0
|
存储 测试技术 文件存储
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(六)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(六)
|
人工智能 智能设计
阿里云logo设计入口(在线一键生成)
阿里云logo设计入口(在线一键生成)
9952 1
阿里云logo设计入口(在线一键生成)
|
缓存 关系型数据库 MySQL
MySQL 5.7详细安装步骤
MySQL 5.7详细安装步骤
538 0
MySQL 5.7详细安装步骤