有效获取elasticsearch索引中的所有文档

2023-12-31

我想从 Elasticsearch 集群中的所有匹配查询中获取所有结果。我不关心结果是否是最新的,也不关心顺序,我只想稳步地继续检查所有结果,然后从头开始。滚动和扫描最适合这种情况吗?拍摄我不需要的快照似乎有点麻烦。我将考虑处理数千万个文档。


有点重复elasticsearch查询返回所有记录 https://stackoverflow.com/questions/8829468/elasticsearch-query-to-return-all-records。但我们可以添加更多细节来解决开销问题。 (即,“拍摄我不需要的快照似乎有点受打击。”)

A 滚动扫描搜索 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html在这种情况下绝对是您想要的。这 “快照”在这里并没有太多开销。该文档将其比喻为“like及时的快照”(强调是添加的)。实际的实现细节有点微妙,而且相当聪明。

文档后面有更详细的解释:

通常,后台合并过程通过将较小的段合并在一起以创建新的较大段来优化索引,此时较小的段将被删除。此过程在滚动期间继续,但开放的搜索上下文可防止旧段在仍在使用时被删除。这就是 Elasticsearch 能够返回初始搜索请求的结果,而不管文档的后续更改如何。

因此,上下文的保存成本较低的原因是 Lucene 索引段的行为方式。 Lucene 索引被划分为多个段,每个段就像一个独立的迷你索引。当添加(和更新)文档时,Lucene 只是将一个新段附加到索引中。段是一次性写入的:创建后,就不再更新。

随着时间的推移,随着段的积累,Lucene 将定期在后台进行一些内务处理。它扫描段并合并段以刷新已删除和过时的信息,最终合并为较小的一组更新鲜和更新的段。当新的合并段替换旧段时,Lucene 将删除所有索引不再主动使用的段。

这种分段索引设计是 Lucene 比简单的 B 树具有更高性能和弹性的原因之一。从长远来看,持续追加段比直接在磁盘上更新文件的累积 IO 更便宜。另外,一次写入设计还有其他有用的特性。

Elasticsearch 此处使用的类似快照的行为是为了在滚动搜索开始时维护对所有活动段的引用。因此开销很小:对少数文件的一些引用。另外,也许还有磁盘上这些文件的大小,因为索引会随着时间的推移而更新。

This may是一笔昂贵的管理费用,if磁盘空间是服务器上的一个严重问题。可以想象,当滚动搜索上下文处于活动状态时,索引的更新速度足够快,可能会使索引所需的磁盘大小增加一倍。为此,确保拥有足够的容量是很有帮助的,这样索引就可以增长到其预期大小的 2-3 倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效获取elasticsearch索引中的所有文档 的相关文章

随机推荐

  • OSX:proc_pidinfo 对于其他用户的进程返回 0

    我需要获取有关在 Mac OSX 上运行进程的一些信息 PID UID GID 进程名称 我试过proc pidinfo 对于我自己的流程来说 它工作得很好 但是 对于其他用户拥有的进程 则返回 0 没有关于此功能的文档 但根据网上找到的资
  • 如何使用 sbt 构建 play 框架示例应用程序(不是 play)?

    我在示例应用程序中调用 sbt 时收到 NPE 请注意 我们无法使用 play 运行我们的整个应用程序 我们需要能够通过 sbt 运行它 C apps playframework samples scala websocket chat g
  • 如何在 RetryPolicy 上使用策略包装?

    我有以下使用的重试策略Polly Extensions Http var retryPolicy Policy Handle
  • Rails 跨多列验证唯一性,不区分大小写

    我有一个包含两个字段的模型 我将其称为first name 和last name 并且我想确保两者的组合不区分大小写是唯一的 我通过使用这个已经完成了一半 validates uniqueness of first name scope g
  • RxJava 和 Retrofit - Rx 的第一步

    使用 RxJava 不带 Retrolambda 我想进行一些 API 调用并用它来完成我的数据 我的不完整对象是一个 电视节目 其中包含对象 季节 列表 这个 季节 是空的 我需要用剧集来完成它 Observable
  • Laravel 5.7 - 未发送验证电子邮件

    我已将 Laravel 实例从版本 5 6 升级到版本 5 7 现在我尝试使用Laravel 内置电子邮件验证 https laravel com docs 5 7 verification 我的问题是 当我使用电子邮件到达的 重新发送 功
  • VisualVM 破坏了码头

    我正在尝试分析由 mvn jetty run 运行的应用程序 当我将 VisualVM 连接到它并单击配置文件 jetty 崩溃时 Profiler Agent Waiting for connection on port 5140 Pro
  • 类型错误:传递给参数“输入”的值的数据类型 float64 不在允许值列表中:float16、bfloat16、float32

    我读过很多与我相似的问题 但它们都与我的不同 for itr in xrange MAX ITERATION train images train annotations train dataset reader next batch ba
  • 如何使用canvas和javascript创建运动模糊效果?

    我有一个带有绘制图标的虚拟画布 该图标是动态的 因此我无法在 Photoshop 中制作该图标的运动模糊变体 我通过以下代码在场景中渲染此图标 function render context context drawImage this b
  • SwiftUI 暂停/恢复旋转动画

    到目前为止 我已经看到了以下用于停止动画的技术 但我在这里寻找的是旋转视图停止在当前的角度 而不是返回到 0 struct DemoView View State private var isRotating Bool false var
  • 如果父窗口关闭了,如何关闭子窗口?

    我有一个弹出另一个窗口的网络应用程序 如果该人关闭主浏览器窗口 我也需要关闭子窗口 这可能吗 如果是这样 怎么办 当您调用 window open 时 返回值是所创建的新窗口的句柄 使用此功能 您可以保留已打开的窗口数组 然后在卸载事件处理
  • swift 中的 HTTP 请求不起作用

    我正在尝试了解如何在 Swift 中使用 API 作为一个很好的第一次测试 我想我应该使用 itunes API 并只返回一些搜索结果 我在操场上使用以下代码 我没有收到任何错误 但我的 println 没有输出任何内容 有谁知道出了什么问
  • 插入字符串 c# 6.0 和 Stylecop

    我正在使用 Stylecop 版本 4 7 49 0 有没有人使用过 c 6 0 中最新的插值字符串功能 example var totalUnits GetUnitsGetTotalIssuedShares myId var testSt
  • 如何使用 Borland 数据库引擎和 Delphi 应用程序解决“无法在封闭数据集上执行此操作”? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 该应用程序运行完美 直到我在 Ope
  • Swift 3:tableView 复制从 Firebase 加载的图像

    我正在尝试显示带有图像的用户列表 这是代码 override func tableView tableView UITableView cellForRowAt indexPath IndexPath gt UITableViewCell
  • 从csv中获取关联数组

    我从 url 打开一个 csv 文件 每行有 4 个字段 每个字段都有一个名称 Field1 Field2 Field3 Field4 现在我的脚本将 csv 数据作为一行处理 但我想这样处理 Array 0 gt array field1
  • 詹金斯后期构建步骤和操作 - 有什么区别

    听起来可能是一个非常基本的问题 但我找不到任何文章可以解释为什么 Jenkins 提供构建后步骤和操作 在詹金斯 我确实看到构建后步骤与操作中的选项是不同的 但是 执行顺序是什么 我们什么时候应该使用哪个选项 最佳实践是什么 乍一看 这是
  • 了解网格列属性

    我最近回答了一个关于 CSS 网格的问题 但在我的回答中 我使用了一种有效的风格 但与我认为的标准方式相反 看看下面的代码片段 红细胞具有以下样式 grid column 3 4 grid width 200px display grid
  • 有没有办法在 Firefox 中将 HTML5 Gamepad API 与多个窗口或选项卡一起使用?

    我正在设计一个应用程序 该应用程序使用 HTML5 游戏手柄 API 来利用游戏手柄的输入 我的应用程序可以在 Firefox 和 Chrome 中运行 但是 Firefox 似乎不允许在前一个选项卡访问游戏手柄后第二个窗口或选项卡访问游戏
  • 有效获取elasticsearch索引中的所有文档

    我想从 Elasticsearch 集群中的所有匹配查询中获取所有结果 我不关心结果是否是最新的 也不关心顺序 我只想稳步地继续检查所有结果 然后从头开始 滚动和扫描最适合这种情况吗 拍摄我不需要的快照似乎有点麻烦 我将考虑处理数千万个文档