如何获取远程主solr服务器已删除但仍存在于本地solr服务器中的已删除文档

时间:2012-10-23 15:23:42

标签: java solr solrj

我正在尝试实现以下功能:

我有一个主中央solr服务器,其中包含所有用户的所有文档 在每个客户端中,我想创建他/她的文档的本地缓存(因此,如果没有互联网连接,用户仍然可以搜索他/她的本地缓存):首先导入在过去2中创建或更改的用户文档的索引周(例如),然后每天,午夜获取该用户在此期间创建,更改或删除的文档的索引,并将更改导入本地缓存。

我使用http://wiki.apache.org/solr/DataImportHandler#SolrEntityProcessor
1.首先,使用/ dataimport& query = + from:jeffery + last_modified:[$ {last_2weeks_ago} TO NOW]导入此用户在过去2周内创建/更改的索引。
2.对于delta导入,要检入已创建或更改的索引(不包括)已删除,我使用/ dataimport& query = + from:jeffery + last_modified:[$ {dataimporter.request.last_index_time}现在正在进行]& clean =假。

但困难的部分是如何获取在最后一天删除的文档的索引。 我找到了一些方法来做到这一点,但它根本没有效率。

解决方案1 ​​ - 效率不高。
1.读取本地缓存中的所有ID(仅加载ID) - 命名为$ {local_ids}
2.在$ {first_index_time}和$ {last_index_time}之间读取远程中央服务器中的所有ID - 名为$ {ids_still_exist_in_remote_server}
3.删除的ID将是= $ {local_ids} - $ {ids_still_exist _in_remote_server}

这可以通过每次仅从本地缓存服务器和远程solr服务器获取N(例如10000)id来优化,然后计算循环中的差异,直到本地和远程服务器中没有ID为止。

溶液2:

在远程中央solr服务器中,删除文档时,将诸如{docid,deletedate}之类的记录(可能是其他一些信息,如作者)添加到solr服务器中。 运行delta-import时,进行查询以在$ {last_index_time}之间获取已删除的ID到现在。

不知道如何实现这一点,但我认为这是可行的。 但这将减慢远程中央solr服务器中的删除操作,并将在远程服务器中保留有关已删除文档的记录。 (虽然我们可以使用一个线程删除有关已删除文档的旧索引)

在solr中还有其他更好的方法吗? 非常感谢您的帮助和建议:)

1 个答案:

答案 0 :(得分:1)

您可以使用Solr replication定期将内容从远程服务器复制到本地服务器,或者使其基于事件(在提交或优化时)。
您无需跟踪更新。