ES 分布式搜索的运行机制

简介: ES 分布式搜索的运行机制

ES 分布式搜索的运行机制

ES 有两种 search_type 即搜索类型:

query_then_fetch (默认)dfs_query_then_fetch

query_then_fetch

query_then_fetch

1.用户发起搜索,请求到集群中的某个节点。2.query 会被发送到所有相关的 shard 分片上。3.每个 shard 分片独立执行 query 搜索文档并进行排序分页等,打分时使用的是分片本身的 Local Term/Document 频率。4.分片的 query 结果(只有元数据,例如 _id_score)返回给请求节点。5.请求节点对所有分片的 query 结果进行汇总,然后根据打分排序和分页,最后选择出搜索结果文档(也只有元数据)。6.根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。7.得到详细的文档数据,组成搜索结果,将结果返回给用户。

缺点:由于每个分片独立使用自身的而不是全局的 Term/Document 频率进行相关度打分,当数据分布不均匀时可能会造成打分偏差,从而影响最终搜索结果的相关性。

dfs_query_then_fetch

dfs_query_then_fetch

dfs_query_then_fetchquery_then_fetch 的运行机制非常类似,但是有两点不同。

1.用户发起搜索,请求到集群中的某个节点。2.预查询每个分片,得到全局的 Global Term/Document 频率。3.query 会被发送到所有相关的 shard 分片上。4.每个 shard 分片独立执行 query 搜索文档并进行排序分页等,打分时使用的是分片本身的 Global Term/Document 频率。5.分片的 query 结果(只有元数据,例如 _id_score)返回给请求节点。6.请求节点对所有分片的 query 结果进行汇总,然后根据打分排序和分页,最后选择出搜索结果文档(也只有元数据)。7.根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。8.得到详细的文档数据,组成搜索结果,将结果返回给用户。

缺点:太耗费资源,一般还是不建议使用。

经验

虽然 ES 有两种搜索类型,但一般还是都用默认的 query_then_fetch当数据量没有足够大的情况下(比如搜索类型数据 20GB,日志类型数据 20-50GB),设置一个 shard 主分片是比较推荐的,只设置一个主分片,你会发现搜索时省掉好多事情。不需要文档数据时,使用 _source: false 可以避免请求节点到非本机分片的网络耗时以及读取磁盘文件的耗时。使用 from + size 分页时,假设你只需要前 10k 条数据里的最后十条,那么每个分片也会取 10k 条数据,如果你的索引有 5 个主分片,那么汇总时就有 5 * 10k = 50k 条数据,这 50k 条数据是在内存里进行排序和最后的分页的,所以深度分页也是比较吃资源的。


目录
相关文章
|
3天前
|
数据库 数据安全/隐私保护
TiDB分布式事务处理机制
【2月更文挑战第28天】TiDB作为开源的分布式HTAP数据库产品,其分布式事务处理机制是其核心功能之一。本章节将深入解析TiDB分布式事务处理机制的工作原理,包括其采用的分布式事务协议、事务的提交与回滚过程、以及如何处理并发事务等关键内容。通过了解TiDB的分布式事务处理机制,我们可以更好地理解其在分布式环境下如何确保数据一致性和事务正确性。
|
3天前
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
3天前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
51 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
3天前
|
算法
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
|
3天前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
|
3天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
75 1
|
3天前
|
算法 安全
金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(Paxos篇)
金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(Paxos篇)
61 1
金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(Paxos篇)
|
3天前
|
算法 调度
金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(上篇)
金石原创 |【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(上篇)
64 1
|
3天前
|
Dubbo 网络协议 应用服务中间件
分布式微服务框架dubbo原理与机制
分布式微服务框架dubbo原理与机制
|
3天前
|
存储 缓存 Java
揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例
揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例