首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除并重新创建索引后,Elasticsearch不会自动提取现有的mongoDB数据

删除并重新创建索引后,Elasticsearch不会自动提取现有的mongoDB数据
EN

Stack Overflow用户
提问于 2012-09-28 06:06:48
回答 3查看 3.1K关注 0票数 1

如果我问了一个愚蠢的问题,我很抱歉,但我想不出解决方案。我将数据存储在mongodb中,并使用richardwilly的插件将集合映射到es索引。然而,我的一些索引被搞乱了(由于这并不是我期望看到的所有数据都在es中(它仍然在mongodb中))。我尝试在虚拟数据上创建一个虚拟索引,我希望在重新索引之后,我可以在es中看到这个数据。

问题似乎是mongo river在oplog上运行,在我删除索引后,在插入下一个第一个新文档后,我希望看到mongodb中的其他数千个文档现在在es中自动可见。但是,我只能看到删除并重新创建索引后插入的文档。其他1000个文档在mongo中仍然可见,但在es中不可见。

我做了一个小实验,我发现如果我真的重新插入了这500个文档,它们就会在elasticsearch中可见(如果索引允许它们全部进入的话)。你能告诉我如何让mongodb中的数据在我重新创建索引后在es中可见,而不必删除和重新插入,因为我不能这样做。我需要重放oplog吗?或者有没有其他方法可以让我在不删除和重新插入的情况下将这些数据放到es中?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-02 05:09:55

在回答我自己的问题时,我得到了elasticsearch社区的帮助。如果删除河流并创建新河流,则映射到的集合中的所有数据都应在elasticsearch索引中可用。

票数 0
EN

Stack Overflow用户

发布于 2012-10-01 14:53:04

正如您所说,MongoDB河使用Mongo的oplog,这意味着您只能将文档的更改索引到Elastic中。(对Mongo索引的更改对oplog没有影响)为了索引在第一个oplog条目之前创建的文档,您需要找到另一种方法。

如果不想使用delete+reinsert,可以在现有文档上执行批量更新。

或者,您可以实现一个工具来查找Elastic中的第一个文档,查询Mongo以查找任何较早的文档,并对丢失的文档进行索引。

票数 2
EN

Stack Overflow用户

发布于 2012-12-11 07:38:03

如果重新创建河流不起作用,有几个选项。

  1. 配置并启动副本集后,使用mongodump/mongorestore重新加载数据库。因为河流使用oplog,所以当您创建河流时,如果新的河流要知道数据存在并且应该被索引,那么数据需要已经通过oplog。(这在开发environment.)
  2. Another中可能更容易完成,它似乎可以通过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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12630724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档