我有一个文件夹 (MY_FILES),其中包含大约 500 个文件,每天都会有一个新文件到达并放置在那里。每个文件的大小约为 4Mb。
我刚刚开发了一个简单的“void main”来测试是否可以在这些文件中搜索特定的通配符。它工作得很好。
问题是我正在删除旧的 indexed_folder 并再次重新索引。这需要花费大量时间并且显然效率低下。我正在寻找的是“增量索引”。意思是,如果索引已经存在 - 只需将新文件添加到索引中。
我想知道 Lucene 是否有某种机制可以在尝试索引“文档”之前检查它是否已被索引。像 writer.isDocExists 之类的东西?
Thanks!
我的代码如下所示:
// build the writer
IndexWriter writer;
IndexWriterConfig indexWriter = new IndexWriterConfig(Version.LUCENE_36, analyzer);
writer = new IndexWriter(fsDir, indexWriter);
writer.deleteAll(); //must - otherwise it will return duplicated result
//build the docs and add to writer
File dir = new File(MY_FILES);
File[] files = dir.listFiles();
int counter = 0;
for (File file : files)
{
String path = file.getCanonicalPath();
FileReader reader = new FileReader(file);
Document doc = new Document();
doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("path", path, Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("content", reader));
writer.addDocument(doc);
System.out.println("indexing "+file.getName()+" "+ ++counter+"/"+files.length);
}
首先,你应该使用IndexWriter.updateDocument(Term, Document)
代替IndexWriter.addDocument
更新文档,这将防止您的索引包含重复的条目。
要执行增量索引,您应该添加last-modified
索引文档的时间戳,并且仅索引较新的文档。
EDIT:有关增量索引的更多详细信息
您的文档应至少有两个字段:
在开始索引之前,只需在索引中搜索最新时间戳,然后爬行目录以查找时间戳比索引最新时间戳更新的所有文件。
这样,每次文件更改时,您的索引都会更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)