【发布时间】:2013-05-22 11:29:38
【问题描述】:
我对如何将构面添加到已经存在的 Lucene 索引有点困惑。
我有一个使用 Lucene 3.1 创建的 Lucene 索引(创建时没有任何方面)。
我查看了 Lucene 文档中的构面,它们向您展示了如何从头开始创建具有构面的索引,即您创建一个新的 Lucene Document 对象,使用分类工具向其中添加构面信息(类别),然后将该文档写入 Lucene 索引(使用IndexWriter),这还将向分类索引添加额外数据(通过TaxonomyWriter),如下所述:
但是,我想要的是使用已经存储在现有 Lucene 索引中的数据,并从中创建一个新的 Lucene 索引(旁边带有分类索引),该索引将包含与原始索引完全相同的数据,加上各种类别信息。
我的问题更准确:
从原始索引中读取一个文档,创建它的CategoryPath,然后将其写入新索引是否足够,如下所示:
//get a document from original Lucene index:
Query query = queryParser.parse("*:*");
originalTopDocs = originalIndexSearcher.search(query,100);
Document originalDocument = originalIndexSearcher.doc(originalTopDocs.scoreDocs[1].doc)
//create categories for original document
CategoryDocumentBuilder categoryDocBuilder = new CategoryDocumentBuilder(taxonomyWriter);
categoryDocBuilder.setCategoryPaths(categoriesPaths);
//create new document from original document + categories:
Document originalDocumentWithCategories = categoryDocBuilder.build(originalDocument);
//write new document to new index:
newIndexWriter.write(originalDocumentWithCategories);
上述代码是否索引了与原始索引中存储的文档相同的文档,但添加了类别数据?例如,原始文档中未存储字段的数据是否仍然存在于新创建和索引的文档中?
还有没有更好的方法来做这个更新(可能不创建新索引)...
【问题讨论】: