我试图弄清楚如何更新已删除记录的索引。我正在从数据库索引。我在数据库中搜索文档,将它们放入数组中并通过创建SolrInputDocument
对它们进行索引。
所以,我无法弄清楚如何更新已删除记录的索引(因为它们现在不存在于数据库中)。
我正在使用php-solr-pecl扩展程序。
答案 0 :(得分:0)
您需要与Solr分开处理文件的删除
索尔不会为你办理。
如果是增量,则需要维护从数据库中删除的文档,然后触发删除查询以清除索引。
为此,您必须维护时间戳并删除标记以标识文档。
如果是Full,您可以清理索引并重新索引所有索引
但是,如果出现故障,您可能会丢失所有数据。
Solr DIH为相同的
提供了一些处理答案 1 :(得分:0)
在数据库表上创建一个删除触发器,它将删除的记录ID插入另一个表中。(或者boolean
字段“deleted
”并标记记录而不是实际删除它,考虑到权衡我会选择触发器)
偶尔根据“已删除”表对索引进行批量删除,同时将其从表本身中删除。
答案 2 :(得分:0)
我们遇到了同样的问题,并提出了批量删除方法。
我们创建了一个程序,它将根据uniqueid从SOLR中删除文档,如果SOLR中存在唯一ID但数据库中没有,则可以从SOLR中删除该文档。
(从SOLR获取uniqueid列表)减去(数据库中的uniqueid列表)
您可以使用SQL减去获取属于需要删除的文档的uniqueid列表。
否则你可以在JAVA方面做任何事情。从数据库中获取列表,从solr获取列表。在2列表和基于此的删除之间进行比较。对于大量文档,这将丢失得更快。您可以使用二进制搜索方法进行比较..
像
这样的东西Collections.binarySearch(DatabaseUniqueidArray, "SOLRuniqueid");