【问题标题】:Bulk read of all documents in an elasticsearch alias批量读取弹性搜索别名中的所有文档
【发布时间】:2016-10-06 16:31:21
【问题描述】:

我有以下弹性搜索设置:

  • 4 到 6 个小型索引(
  • 它们通过别名联合
  • 它们都包含相同的文档类型
  • 它们很少更改非常(即>99% 的索引在创建索引时发生)

我的应用程序的一个用例需要读取别名的所有文档,按字段排序,做一些魔术并提供结果。

我知道使用深度分页很可能会导致我的集群崩溃,或者至少性能不佳,所以我想知道scroll API 是否可以成为解决方案。我知道文档说它不适用于实时用户查询,但实际原因是什么?

一般来说,人们如何处理必须通读索引中的所有文档的问题?我应该寻找另一种方法来分块数据吗?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

当您使用滚动 API 时,Elasticsearch 会为索引的当前状态创建一种游标,因此不建议将其用于实时搜索的原因是因为您不会看到之后插入的任何新文档你创建了滚动令牌。

由于您的用例表明您很少在索引中更新或插入新文档,这对您来说可能不是问题。

在生成滚动标记时,您可以指定带有排序的查询,因此如果您的文档有某种时间戳,您可以为所有带有timestamp: { lte: "now" } 的文档和另一个滚动(或每个简单查询)创建一个滚动上下文通过指定特定日期范围过滤器,为未包含在第一个搜索上下文中的其余文档。

【讨论】:

  • 对。出于某种原因,我没有意识到文档不鼓励将其用于实时用户查询......
  • 在某处提到保持光标打开也会导致更多打开的文件句柄。但是我再次假设这只是在光标打开时进行索引时的问题?
  • 不,这与索引无关。当您创建游标时,您可以指定保留搜索上下文的时间量,该时间量会为您发出的每个连续请求重置,因此如果您定义 5m 这意味着搜索上下文(或游标)将在您使用它的最后一个请求后存活 5 分钟。如果您创建许多此类游标,它可能会影响您的集群性能,但同样,我不确定它是否与您的用例相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
相关资源
最近更新 更多