我在做什么:
来自java代码我正在检索notes数据库并使用全文索引索引该数据库的所有文档
使用solrj
客户端并在特定文本服务器上保存特定文档的索引数据。
假设当同一个数据库再次出现用于索引时,考虑删除该数据库中的任何一个文档,该文档已在全文服务器上编入索引,
但是这个文档是从notes数据库中删除的,所以我不想保留(意味着要删除)已删除文档的全文服务器上的索引数据。
那我怎么知道哪个文件被删除
我在想的是,在索引时存储文档的id和db名称,因此我将记录索引文档,因此我可以识别从特定数据库中删除的文档。
其他任何有效方式?
感谢您阅读问题。
答案 0 :(得分:2)
文档的Document通用ID至少对于完整的数据库是唯一标识符。
您可以使用Java中的Document.getUniversalID()
获取它
按照设计,每个唯一的ID在全球范围内都是独一无二的,但作为设计师,您可以解决这个问题(unids是可写的),复制品当然也包含具有相同唯一ID的文档。
将unid与数据库的文件路径相结合,然后它确实是唯一的。
现在只需记住您编入索引的所有unids,并在下次运行检查后,如果有一些,您再也找不到了(例如,只需删除每个"找到" unid - 路径密钥existing indices
- 列表和最后的内容不再存在)。
<强>背景强>
在NSF数据库中删除的每个文档在最终清除之前(至少)90天内变为所谓的Deletion Stub
。
每个数据库的时间间隔是可配置的,如果管理员决定,则可以少于90天......
这些删除存根仍包含unid作为信息。它们非常适合您的目的(因为这正是它们用于称为replication
)的内部过程的目的。
不幸的是,没有简单的方法可以为Java数据库获取这些删除存根 有 方法可以使用external tools或C-API from LotusScript来获取它们,但它们都不容易在Java中使用。