问题似乎是mongo河在oplog和 删除索引后,插入下一个第一个新文档 我想在mongodb中看到其他数千个文件 现在自动显示在es。但是,我只看到文件 我删除并重新创建索引后插入的。另一个 仍然可以在mongo中看到1000个文档但不在es。
中我做了一个小实验,我看到如果我真的重新插入了 500个文档,然后在elasticsearch中可见(如果索引是 允许他们全部进入的权利)。你能告诉我怎样才能做到 我重新创建索引后,mongodb中的数据在es中可见 必须删除并重新插入,因为我不能这样做。我需要重播吗? oplog还是有其他方法,你可以这样建议 我可以将这些数据导入es而不删除并重新插入吗?
谢谢!
答案 0 :(得分:2)
正如你所说,MongoDB的工作原理是使用Mongo的oplog,这意味着你只能将文档的更改索引到Elastic中。 (对Mongo索引的更改与oplog无关)为了索引在第一个oplog条目之前创建的文档,您需要找到另一种方法。
如果您不想删除+重新插入,则可以对现有文档执行批量更新。
或者,您可以实现一个工具,在Elastic中查找第一个文档,查询Mongo以查找任何早期文档并索引缺少的文档。
答案 1 :(得分:0)
回答我自己的问题,我得到了弹性搜索社区的帮助。如果删除河流并创建新河流,则映射到的集合中的所有数据都应该在elasticsearch索引中可用。
答案 2 :(得分:0)
如果重新创建河流不起作用,有几种选择。
配置并启动副本集后,使用mongodump / mongorestore重新装入数据库。因为河流使用oplog,所以当您创建河流时,如果新河流将知道数据存在且应该被编入索引,则数据需要通过oplog传递。 (在开发环境中这可能更容易。)
另一种可能的方式是通过rails控制台触摸所有对象。同样,请确保您的副本集已在运行:
$ bundle exec rails c
1.9.1 :001 > Person.all.each do |person|
1.9.1 :002 > person.save()
1.9.1 :003?> end