如果我问了一个愚蠢的问题,我很抱歉,但我想不出解决方案。我将数据存储在mongodb中,并使用richardwilly的插件将集合映射到es索引。然而,我的一些索引被搞乱了(由于这并不是我期望看到的所有数据都在es中(它仍然在mongodb中))。我尝试在虚拟数据上创建一个虚拟索引,我希望在重新索引之后,我可以在es中看到这个数据。
问题似乎是mongo river在oplog上运行,在我删除索引后,在插入下一个第一个新文档后,我希望看到mongodb中的其他数千个文档现在在es中自动可见。但是,我只能看到删除并重新创建索引后插入的文档。其他1000个文档在mongo中仍然可见,但在es中不可见。
我做了一个小实验,我发现如果我真的重新插入了这500个文档,它们就会在elasticsearch中可见(如果索引允许它们全部进入的话)。你能告诉我如何让mongodb中的数据在我重新创建索引后在es中可见,而不必删除和重新插入,因为我不能这样做。我需要重放oplog吗?或者有没有其他方法可以让我在不删除和重新插入的情况下将这些数据放到es中?
谢谢!
发布于 2012-10-02 05:09:55
在回答我自己的问题时,我得到了elasticsearch社区的帮助。如果删除河流并创建新河流,则映射到的集合中的所有数据都应在elasticsearch索引中可用。
发布于 2012-10-01 14:53:04
正如您所说,MongoDB河使用Mongo的oplog,这意味着您只能将文档的更改索引到Elastic中。(对Mongo索引的更改对oplog没有影响)为了索引在第一个oplog条目之前创建的文档,您需要找到另一种方法。
如果不想使用delete+reinsert,可以在现有文档上执行批量更新。
或者,您可以实现一个工具来查找Elastic中的第一个文档,查询Mongo以查找任何较早的文档,并对丢失的文档进行索引。
发布于 2012-12-11 07:38:03
如果重新创建河流不起作用,有几个选项。
$ bundle exec rails c 1.9.1 :001 > Person.all.each do |person| 1.9.1 :002 > person.save() 1.9.1 :003?> end
https://stackoverflow.com/questions/12630724
复制相似问题