SOLR 3.1索引问题

时间:2011-06-08 19:44:56

标签: solr

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

我们正在使用带有Jetty的SOLR 3.1。我们根据我们的要求设置了模式。我们设置了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导入时更新此数据库字段。因为tag只允许您搜索查询,或者换句话说只返回某些内容。所以,我有另一个想法仍然更新该数据库字段。我在我的数据库中创建了一个存储过程,其中包含更新数据库中的字段的更新查询,然后我有select查询,它只返回1条记录以满足要求。但是当我试图运行DIH时,它返回“索引失败。回滚所有更改”错误消息并且没有导入任何内容。当我将更新查询注释到存储过程中时,它就可以工作了。所以它不允许我从存储过程运行更新查询。所以我试图找到一种从DIH更新数据库的方法。但我真的没有找到任何悲伤的笑容我拒绝更新数据库的想法。

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

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

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

请请指导我们如何轻松同步。使用我们的数据库收集并确保它已100%同步。

2 个答案:

答案 0 :(得分:0)

您在Solr和数据库中使用哪个字段用于ID? id字段必须是唯一的,因此如果您有30,000条记录与其他30,000条记录具有相同的ID,则数据将覆盖这些记录。

此外,当您运行数据导入处理程序时,您可以查询它的状态(?command = status),这应该告诉您上次运行时导入的记录总数。

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

答案 1 :(得分:0)

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

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

但应该有一个更好/更优雅的解决方案。我不知道如何在你的情况下丢失记录。但是如果你已经对id进行了索引,那么你可以将索引的id与外部源进行比较并获得差距