【问题标题】:ElasticSearch count API return the same number even after successful document insertion即使在成功插入文档后,ElasticSearch 计数 API 也会返回相同的数字
【发布时间】:2020-11-07 18:15:59
【问题描述】:

我使用 ElasticSearch python 模块的批量 API 将新文档添加到 ElastichSearch 中的索引。它返回成功,当我在 ElasticSearch 索引中搜索文档时,我可以找到它。所以我确定插入是正确的。但是,使用 ElastiSearch 计数 API (https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-count.html) 我得到与插入文档之前相同的数字。这是它的输出:

epoch      timestamp count
1604741686 09:34:46  1297277503

是不是因为我的索引文件太多了?

【问题讨论】:

  • 插入后是否立即检查? Elasticsearch 不时刷新(可配置),因此您不会立即看到结果,而是在刷新索引之后。更多在这里 - elastic.co/guide/en/elasticsearch/reference/current/…
  • 我已将 referh_interval 设置为 -1。这就是 count API 出现这种行为的原因。感谢您的回复

标签: elasticsearch


【解决方案1】:

我认为这是因为 Elasticsearch 不时刷新(可配置),因此您不会立即看到结果,而是在刷新索引之后。考虑到您在修改后手动检查它 - 到那时它可能已经刷新,所以您会看到更新的值。

如果你想玩这种行为,它有几个解决方案。它对测试很有用,但我强烈坚持你重新设计你的应用程序,让它在生产中是异步的。

更多信息在这里 - https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html

【讨论】:

  • 感谢您的回答。我的 referesh_interval 是 -1,所以这是 count API 出现这种行为的原因。
【解决方案2】:

正如@eocron 提到的,ES 使用refresh 对更改进行软注释,以便可以搜索,但默认值为 1 秒,称为 refresh_interval。

但是我知道,您有超过 1.29 亿个文档,请注意 count API 使用副本分片来提高此 API 的可扩展性和性能,因此数据可能不会复制到您的所有副本分片(这可能需要很多时间)基于集群、节点、索引配置(更多副本 shad 意味着更多时间来复制所有更改)和数据节点上的负载。

请阅读Desc. of count API 和同一个文档

该操作在所有分片上广播。对于每个分片 ID 组, 选择一个副本并对其执行。这意味着副本 增加计数的可扩展性。

总之,你需要在下面说出来,以便我们给出更具体的原因。

  1. 索引的刷新间隔
  2. 在所有副本分片中复制数据需要多长时间。
  3. 发送更新/索引请求后,您在检查计数之前给出了多少间隔

【讨论】:

  • 感谢您的回答,我已手动将 refresh_interval 设置为 -1。所以现在我知道这是什么原因了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2017-06-27
  • 2019-12-10
  • 1970-01-01
相关资源
最近更新 更多