目前,我正在遍历29000个文档,在每个文档中,我都会向嵌套字段添加一个子文档并进行更新。为了管理我所处理的数据量,我将循环分解成10,000个组,并使用ES大小和from选项来控制每个迭代应该从哪里开始。所以,一旦第一个10,000被更新,我执行另一个查询来获取下一个10,000,等等.问题是,每次我进入第二组时,批中有少数几个文档已经在前10,000批中处理过,当我进入第三批时,所有已经处理过的文档都应该从20,000到29,000范围内获取文档。
似乎我处于某种竞争状态,因为按版本号进行排序或查询没有任何效果。我也尝试过在查询之间进行刷新和刷新,但仍然没有结果。
有没有人遇到过类似的问题?
发布于 2015-06-29 23:03:15
在ElasticSearch中,在什么时候写东西和什么时候可以阅读之间有1秒的间隔。您可以很容易地创建一个测试来验证这一点,用id 1插入记录,立即尝试读取id 1,您将得到返回null。
您想要做的是在ES中使用"SCROLL SCAN“。当使用卷轴时,它会跟踪已经给您的记录,这样当您请求返回下一个10,000时,您就可以保证不会得到任何副本。
注意:当您指定滚动扫描的大小时,您指定的大小是每片。因此,如果您想要返回10,000块,则需要指定size = 10,000/# number of shards
https://stackoverflow.com/questions/31126895
复制相似问题