0

我试图弄清楚如何更新已删除记录的索引。我正在从数据库中索引。我在数据库中搜索文档,将它们放入一个数组并通过创建一个SolrInputDocument.

所以,我不知道如何更新已删除记录的索引(因为它们现在不存在于数据库中)。

我正在使用php-solr-pecl扩展。

4

3 回答 3

0

我们遇到了同样的问题,并提出了批量删除的方法。

我们创建了一个程序,该程序将根据唯一 ID 从 SOLR 中删除文档,如果唯一 ID 存在于 SOLR 中但不在数据库中,您可以从 SOLR 中删除该文档。

(从 SOLR 中获取唯一 ID 列表)减去(从数据库中获取唯一 ID 列表)

您可以只使用 SQL 减号来获取属于需要删除的文档的唯一 ID 列表。

否则你可以在 JAVA 方面做任何事情。从数据库中获取列表,从 solr 中获取列表。在 2 个列表之间进行比较并基于此删除。对于大量文档,这会丢失得更快。您可以使用二进制搜索方法进行比较..

就像是

Collections.binarySearch(DatabaseUniqueidArray, "SOLRuniqueid");
于 2013-06-12T18:34:17.337 回答
0

在数据库表上创建一个删除触发器,它将在另一个表中插入已删除的记录 ID。(或具有boolean字段“ deleted”并标记记录而不是实际删除它,考虑到我会选择触发器的权衡)

偶尔根据“已删除”表对索引进行批量删除,同时将它们从表本身中删除。

于 2013-06-11T11:21:39.023 回答
0

您需要与 Solr 分开处理文档的删除。
Solr 不会为您处理它。
在增量的情况下,您需要维护从数据库中删除的文档,然后触发删除查询以清理索引。
为此,您必须维护时间戳和删除标志以识别文档。在完整的情况下,您可以清理索引并重新索引所有。
但是,如果发生故障,您可能会丢失所有数据。

Solr DIH 提供了一些相同的处理

于 2013-06-11T09:48:22.963 回答