Lucene:将facet添加到现有索引
对于如何将方面添加到已经存在的Lucene索引中,我感到有点困惑 我有一个使用Lucene 3.1创建的Lucene索引(创建时没有任何方面) 我已经查看了Lucene文档中的facet,在那里他们向您展示了如何从头创建一个带有facet的索引,也就是说,您创建一个新的LuceneLucene:将facet添加到现有索引,lucene,updates,facet,Lucene,Updates,Facet,对于如何将方面添加到已经存在的Lucene索引中,我感到有点困惑 我有一个使用Lucene 3.1创建的Lucene索引(创建时没有任何方面) 我已经查看了Lucene文档中的facet,在那里他们向您展示了如何从头创建一个带有facet的索引,也就是说,您创建一个新的Lucene文档对象,使用分类工具向其添加facet信息(类别),然后在Lucene索引中编写该文档(使用IndexWriter)这还将向分类法索引添加额外数据(通过TaxonomyWriter),如下所述: 然而,我想要的是使
文档
对象,使用分类工具向其添加facet信息(类别),然后在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);
上述代码索引的文档是否与原始索引中存储的文档相同,但添加了类别数据?例如,原始文档中非存储字段的数据是否仍存在于新创建和索引的文档中
还有没有更好的方法来进行此更新(可能不创建新索引).好的,下面是我如何解决此问题的一些见解:
- 您需要的所有字段也已存储在原始索引中。如果存在仅已编制索引(且未存储)的字段,则无法恢复这些字段,以便在新索引中对其重新编制索引(使用方面)
- 您还必须了解用于创建原始索引和用于创建查询的分析器:
- 为了在创建新索引时(从存储的值)获得相同的术语,需要原始索引时间分析器
- 在原始索引上创建查询时,各种QueryParser上使用的分析器需要能够为新索引重新构造相同的查询
- 您仍然需要有关用于索引和查询初始Lucene索引的Lucene分析器的所有信息。您传递给Solr的事实也增加了查看那些Lucene分析器如何映射到Solr所提供的内容的开销(大多数Solr分析器/过滤器与Lucene的分析器/过滤器相同,但不是全部)
- Solr没有Lucene编程查询API(无法执行
,并且自动神奇地在后台创建正确的查询术语)。如果您想将大量使用上述编程查询API的Lucene查询转换为Solr查询,您必须制作自己的工具来生成相应的Lucene查询字符串。当然,您仍然可以使用Lucene API构建查询对象,然后在将它们发送到Solr之前对它们执行new SpanQuery(“My blue boat*”)
,但这并不是一直都有效,而且对于某些复杂的查询,这可能会变得非常复杂toString()