2011-06-08 83 views
0

我们正在面临SOLR搜索的一些问题。SOLR 3.1索引问题

我们使用SOLR 3.1和Jetty。我们根据我们的要求设定了架构。我们设置了data-config.xml来将数据从我们的数据库(Sql Server 2005)导入到Collection(Core)中。 我们需要导入的数据库中有320,000条记录。

完成导入后,当我尝试Solr管理搜索中的所有记录

http://localhost:8983/solr/Collection_201/admin/

这表明我总人数290发现,000因此,30,000记录丢失。

现在下面的问题是在我的脑海

我怎么能知道哪个记录不正确索引?或哪些记录丢失?要知道这一点,我试过一个窍门,我想我应该在数据库中放入一个字段,以知道哪些记录导入到SOLR集合中,哪些不是。但是最大的问题是如何在从data-config.xml导入时更新这个数据库字段。因为标签只允许您搜索查询或换句话说要返回。所以,我有另一个想法仍然更新该数据库字段。我在我的数据库中创建了一个存储过程,其中包含更新查询,该更新查询将更新数据库中的字段,然后我选择查询,只是返回1条记录以满足要求。但是当我试图运行DIH时,它返回“索引失败。回滚所有更改”错误消息,并且没有任何输入。当我评论更新查询到存储过程,然后它的工作。所以它不允许我从存储过程运行更新查询。所以我努力找到一种方法来从DIH更新数据库。但我真的没有找到任何伤心的微笑,我拒绝这个想法来更新数据库。

我清除了索引并重新开始导入数据。这一次,我尝试手动运行solr管理导入页面,每回合5,000条记录。最后,对于一些如何记录仍然缺失。

这是可能的,它没有正确承诺。我在导入页面的文档(http:// localhost:8983/solr/Collection_201/dataimport?command = full-import & clean = false)中自动提交导入的数据。但我个人注意到它有一段时间或有时它不。所以它真的让我疯狂伤心的微笑

现在我完全沮丧,并开始思考我使用SOLR的方式是否正确。如果我是对的,那么它是否可靠?如果我错了,请指导我什么是我的错误?

请请指导我们如何轻松地同步。与我们的数据库收集,并确保它是100%同步。

回答

0

你在Solr和数据库中使用了哪些字段? id字段必须是唯一的,所以如果您有30,000条与30,000条其他记录具有相同ID的记录,那么数据将覆盖这些记录。另外,当您运行数据导入处理程序时,您可以查询它的状态(?command = status),并且应该告诉您上次运行导入的记录总数。

我要做的第一件事就是检查数据库中的非唯一ID WRT solr id字段。

0

另请注意,当批处理中的一条记录错误时,整个批处理会回滚。所以如果它发生了3次,而且你正在索引每个10K的文档,那就可以解释它。

当时,我解决了这个问题:https://github.com/romanchyla/montysolr/blob/master/contrib/invenio/src/java/org/apache/solr/handler/dataimport/NoRollbackDataImporter.java

但应该有比这更好/更优雅的解决方案。我不知道如何在你的情况下丢失记录。但是,如果您已将索引编制为ID,则可以将索引ID与外部来源进行比较,并获得差距