1

如何从 lucene 索引TokenStream中获取用于 aField内的标记(无论是标记列表、还是其他)?Document也就是说,是否可以tokens从索引中获取(来自示例)中使用的标记?(我不知道如何从 a 中获取令牌TokenStream

doc.add(new Field("title", tokens))

在文档中有,Field.tokenStreamValue()但是当我这样做时doc.getFieldable(field_name),它会简单地返回null.

我也尝试过(来自lucene 中的第三条评论 - Fieldable.tokenStreamValue()):

TokenSources.getTokenStream(reader, doc_id, field_name)

但我明白了

java.lang.IllegalArgumentException: title in doc #630does not have any term position data stored
    at org.apache.lucene.search.highlight.TokenSources.getTokenStream(TokenSources.java:256)
4

1 回答 1

2

TokenSources类是一个辅助类,用于检索文档的标记以进行突出显示有两种方法可以检索给定文档的术语:

  • 重新分析存储的字段,
  • 阅读文档的术语向量。

您要使用的方法尝试读取文档的术语向量,但由于您没有在索引时启用术语向量而失败。

因此,您可以在索引时启用术语向量并继续使用此方法(请参阅Field 构造函数Field.TermVector的文档)或重新分析存储字段的内容。第一种方法可能会提供更好的性能,尤其是对于大型字段,而第二种方法将节省空间(如果您的字段已存储,则无需存储其他信息)。

于 2012-03-20T08:53:09.667 回答