我有大量的 PDF/Word/Excel/等。要索引的文件(现在为 40GB,但在某些月份可能达到 1000GB),我正在考虑使用 Solr、DataImportHandler 和 Tika。我已经阅读了很多关于这个主题的主题,但是有一个问题我仍然没有找到解决方案:如果我索引所有文件(完整或增量导入),删除文件系统中的一个文件,然后再次索引(使用delta import),则该文件对应的文档不会从索引中删除。
以下是一些可能性:
- 进行完全导入。但我想尽可能避免这种情况,因为我认为这可能非常耗时(几天,但不是很重要)并且消耗带宽(这是主要问题,因为文件位于共享网络驱动器上)。
- 实现一个脚本,该脚本将验证索引中的每个文档是否存在相应的文件(消耗的带宽要少得多)。但我不知道我是否应该在 Solr 内部或外部执行此操作,以及如何执行。
您还有其他想法或执行第二个解决方案的方法吗?提前致谢。
一些细节:
- 我将使用 FileListEntityProcessor 的“newerThan”选项来执行增量导入。
- 如果我存储文档索引的日期,它对我没有帮助,因为如果我在上次导入时没有索引某个文档,可能是因为该文档已被删除,或者因为它没有更改(增量导入)
- 我同时拥有存储字段和未存储字段,因此我认为使用 Solr 4.0 的新功能仅更改文档中的一个字段并不是一种解决方案。
最佳答案
您是否考虑过使用文件系统监视器来捕获删除并更新索引?
我认为 apache.commons.io 支持这一点。
查看apache.commons.io.monitor包,FileAlterationObserver和 FileAlterationMonitor类。
关于Solr + DIH + Tika : indexing huge amount of files, 如何处理删除的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359792/