当前位置: 首页 > 面试题库 >

elasticsearch滚动行为

戚飞
2023-03-14
问题内容

我在Elastic Search中遇到了滚动功能,这看起来很有趣。我浏览了许多文档,但对我而言仍然不清楚以下问题。

  1. 如果偏移量已经存在,那么为什么要使用滚动?
  2. 那即将到来的记录呢?假设它完成了所有数据的滚动,然后几秒钟后新数据进入了索引,那么它将如何工作?它还会滚动以获取新记录,例如流媒体吗?
  3. 假设由于服务器负载或Internet问题导致连接断开,那么它将从头开始滚动数据吗?

所有这些问题都与将数据从旧索引重新索引到新索引有关。


问题答案:

我将尝试就此提供一些信息,因为我最近也对此进行了一些研究:

如果偏移量已经存在,那么为什么要使用滚动?

我不确定是否可以结合使用滚动和偏移量。但是我相信主要的区别是偏移查询将为您提供“假”结果。如果为False,它将正确执行查询,但是请考虑介于两者之间的所有更新。在重新索引方面,这将是错误的,因为您可能会丢失数据。想象一下,您对10k个结果进行了偏移量查询,然后花费2分钟来处理它。您可能会在2分钟内更新对象(或插入内容)。这意味着将查询偏移10k可能最终指向跳过中间几行的结果,或者指向已经存在的结果(想象之间的删除)。但是,Scroll保证保持搜索上下文有效,并以清晰,严格的方式返回结果,其中不考虑任何更新。

我想,所需的行为可以用一个恒定的分选+作为记录在这里搜索后实施:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-
request-search-
after.html

这应该可以使结果稳定(光标指向正确的偏移量),但是仍会考虑2个请求之间发生的所有更改(我认为)。

我想通过更改配置(例如logstash)开始将正确的文档插入新索引,然后滚动所有旧数据以将其重新索引到新索引中,从而可以进行重新索引。通过使用滚动,您仍然可以使用旧数据,而更改不会影响您的重新索引操作。

文件:

当搜索请求返回单个“页面”结果时,滚动API可用于从单个搜索请求中检索大量结果(甚至所有结果),其方式与在游标上使用光标的方式几乎相同传统数据库。

接下来:

那即将到来的记录呢?假设它完成了所有数据的滚动,然后几秒钟后新数据进入了索引,那么它将如何工作?它还会滚动以获取新记录,例如流媒体吗?

滚动将保留在第一个滚动请求上创建的结果。这是通过拍摄快照并防止将更改发布到特定滚动条来完成的。文件:

从滚动请求返回的结果反映了发出初始搜索请求时的索引状态,如时间快照。对文档的后续更改(索引,更新或删除)只会影响以后的搜索请求。

第三:

假设由于服务器负载或Internet问题导致连接断开,那么它将从头开始滚动数据吗?

没关系。Scroll带有一个POST /twitter/tweet/_search?scroll=1m分配,例如,赋值1m指示elasticsearch在ES服务器上保持搜索上下文有效的时间。这意味着,如果您的连接中断,您要做的就是拿起您的滚动ID并使用它创建一个新的请求。ES会将该ID与现有搜索上下文匹配,并为您提供预期的结果。文件:

为了使用滚动,初始搜索请求应在查询字符串中指定scroll参数,该参数告诉Elasticsearch它应将“搜索上下文”保持活动状态的时间(请参见使搜索上下文保持活动状态),例如?scroll
= 1m。

通常,所有这些信息都可以在这里找到:https :
//www.elastic.co/guide/en/elasticsearch/reference/current/search-request-
scroll.html

希望这可以帮助,

阿图尔



 类似资料:
  • 问题内容: 我对Elasticsearch的滚动功能感到有些困惑。在Elasticsearch中,是否每当用户滚动结果集时都可以调用搜索API?从文档 这是否意味着它将每30秒执行一次搜索并返回所有结果集,直到没有记录为止? 例如,我的ES总共返回500条记录。我从ES获得的数据是两组分别有250条记录的记录。有什么办法可以让我先显示第一组250条记录,当用户滚动时再显示第二组250条记录。 问题

  • 问题内容: 我想从索引中获取所有数据。由于项数太大而无法存储,因此我使用了Scroll(很好的功能): 调用时效果很好: 但是,当我多次调用前一个方法时,会得到相同的多次,因此无法并行滚动多次。 我找到了http://elasticsearch-users.115913.n3.nabble.com/Multiple-scrolls- simultanious-td4024191.html ,其中指

  • 问题内容: 滚动搜索可以设置的最大滚动时间是多少? 文档:https : //www.elastic.co/guide/zh- CN/elasticsearch/client/javascript-api/current/api-reference.html#api- scroll 问题答案: 没有最大滚动时间的所有值。 扫描和滚动旨在以块的形式扫描大量记录。每个块的最大值必须通过增量增加来获得,

  • 问题内容: 我定义了以下滚动索引: 今天效果很好,它收集了我所有 现有的 每月滚动指标。问题在于,当索引滚动到新的月份时,它会自动生成的新索引,但是我的别名无法获取该新索引。每个月我需要通过运行以下命令来更新别名: 有什么方法可以让ES自动选择? 问题答案: 是的,您可以使用模板。 空对象是必然的邪恶,因为JSON期望。 每当创建匹配索引(基于参数)时,它将自动将模板应用到该索引。在这种情况下,模

  • 问题内容: 所以首先我运行以下命令: 这将返回一个滚动ID,然后在第一个滚动请求中使用该滚动ID: 该文档会使我相信,当我运行第二个curl请求时,我应该获得一个新的滚动ID。 但是,看起来我一直在返回相同的滚动ID。 看起来每个请求返回的数据都不同,因此我假设一切正常。 到底是怎么回事? 问题答案: 您上面的内容是正确的。 在后续滚动请求中,scroll_id可以相同或可以不同。但是结果集(命中

  • 问题内容: 我正在将其用作搜索的一部分,但必须使用+30000个项。 问题在于,搜索的初始部分是在搜索之前完成的,因此触发和功能将继续进行。我应该怎么做才能阻止这种情况? 问题答案: 所以,我已经重新编写了它,以便在这里帮助任何需要它的人。