当前位置: 首页 > news >正文

ElasticSearch为什么不能在query阶段直接返回_id,从而避免fetch?

整理自Github的一个issue,也正好解答了我的疑惑
https://github.com/elastic/elasticsearch/issues/17159

提问

是否可以避免搜索的fetch阶段并仅返回文档ID?查询阶段结束时是否有_id,这样当我只需要_id时,fetch就多余了?可以通过当前API完成此操作吗?

最终,我希望能够比目前所见的速度更快地从搜索中检索文档ID。我已经尝试了所有文档中记录的各种方法来获得更好的性能,但没有找到令人满意的结果。我所取得的最佳成果只是通过并行查询每个5个分片中的每个分片而获得了25%的速度提升。一个可接受的速度提升应该快90%。了解这是否合理以及如果不合理的原因将会很有帮助。很难理解为什么我可以快速得到a)前100个结果,b)总计数,以及c)快速排序它们,但检索结果却非常慢。

此外,通过开发插件是否有可能提高此(仅限ID)场景的性能?是否有其他选项,无论是记录在案还是未记录在案,可以减少开销?

强调一下这一点的重要性,这对我们的实施至关重要,很可能是我们决定采用Elastic以替换当前庞大的持久性层的关键因素。

回答

搜索阶段获取 Lucene的文档 ID(整数),而不是 elasticsearch 的 ID(字符串)。fetch阶段使用 Lucene 的存储字段机制查找文档 ID。存储字段以压缩块的形式存储在一起。由于 _source 是一个存储字段,因此您必须解压缩大量 _source 才能获得 ID 字段。由于它是分块的,因此您还必须解压缩未命中的文档的存储字段。

聚合速度很快,因为它们使用文档值(doc values),这是一种非分块的列式结构。它经过压缩,但使用的是数值技巧,而不是通用的压缩算法。如果能够将您的工作重新设计为一个聚合操作,通过将感兴趣的工作推送到 Elasticsearch,那么您的操作速度可以提升数个数量级。

http://www.lryc.cn/news/494387.html

相关文章:

  • 网安瞭望台第5期 :7zip出现严重漏洞、识别网络钓鱼诈骗的方法分享
  • 获 2023 年度浙江省科学技术进步奖一等奖 | 网易数智日报
  • SQL基础入门 —— SQL概述
  • 【附录】Rust国内镜像设置
  • 量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台
  • MATLAB —— 机械臂工作空间分析
  • 向日葵连接xrdp虚拟桌面
  • AI智算-正式上架GPU资源监控概览 Grafana Dashboard
  • goframe框架bug-记录
  • 对偶分解算法详解及其Python实现
  • C# WinForm怎么使用COM组件
  • 【Python】深入理解Python的字符串处理与正则表达式:文本处理的核心技能
  • 【开源项目】2024最新PHP在线客服系统源码/带预知消息/带搭建教程
  • OpenCV从入门到精通实战(五)——dnn加载深度学习模型
  • 【Leetcode Top 100】142. 环形链表 II
  • 嵌入式Qt使用ffmpeg视频开发记录
  • iOS 17.4 Not Installed
  • CTF之WEB(sqlmap tamper 参数)
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍
  • ollama部署bge-m3,并实现与dify平台对接
  • 在并发情况下,Elasticsearch如果保证读写一致?
  • AMD的AI芯片Instinct系列介绍
  • 【知识科普】设计模式之-责任链模式
  • fiddler安卓雷电模拟器配置踩坑篇
  • 机器学习5-多元线性回归
  • Linux kernel 堆溢出利用方法(三)
  • 对于GC方面,在使用Elasticsearch时要注意什么?
  • Xilinx PCIe高速接口入门实战(一)
  • Flume 监控配置和实践