SOLR 3.1 索引问题

Posted

技术标签:

【中文标题】SOLR 3.1 索引问题【英文标题】:SOLR 3.1 Indexing Issue 【发布时间】:2011-06-08 19:44:55 【问题描述】:

我们在 SOLR 搜索方面遇到了一些问题。

我们正在使用带有 Jetty 的 SOLR 3.1。我们已经根据我们的要求设置了架构。我们已设置 data-config.xml 以将记录从我们的数据库(Sql Server 2005)导入到集合(核心)中。 数据库中有 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% 同步的。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于SOLR 3.1 索引问题的主要内容,如果未能解决你的问题,请参考以下文章

Solr06-SolrJ的使用及其高级查询

solr的索引库core相关配置解析

通过Nutch扩展点开发插件(添加自定义索引字段到solr)

Solr09-SolrJ的简介和使用

solr实战-

Solr 不会覆盖 - 重复的 uniqueKey 条目