通过Lucene.net,我想获得stackoverflow question中描述的术语向量。
问题是,索引已经用被索引和存储的字段生成,但是没有术语向量。
FieldType type = new FieldType();
type.setIndexed(true);
type.setStored(true);
type.setStoreTermVectors(false);
从理论上讲,应该可以重新计算每个文档的术语向量,然后将其存储在索引中。
你知道这怎么可能,而不删除完整的Lucene索引?
1条答案
按热度按时间8tntrjer1#
正如我在问题的注解中提到的,您可以动态生成术语向量数据,这可能有助于避免完全重建索引数据。
在我的场景中,我希望找到我的搜索词在匹配文档中的偏移位置。
我不想过度宣传这种方法-它绝对不能替代重新索引-但如果您的查询是基本的,它可能会有所帮助。
步骤1:执行您目前正在执行的任何查询。
对于命中列表中的每个文档,您将需要重新处理该文档中的相关字段-因此,您要么已经将字段数据存储在现有索引中,要么需要从其原始源中检索它。
步骤2:对于每个这样的字段,您可以重复使用相同的分析器来即时建立记号流。记号流可以设定为不同的属性,例如:
范例:
上面的示例假设步骤1中的一个命中是包含
"Foo Bar Baz Bar Bat"
-的字段,搜索项为bar
。生成的输出为:
因此,正如您所看到的,您并不是在重新执行查询-您只是在重新处理令牌流。原始搜索词越复杂,就越难按照您可能需要的方式使用这种方法。