2012-03-19 60 views
1

如何從lucene索引獲取在Document內用於Field的令牌(無論是令牌列表還是其他內容)?也就是說,是否有可能從索引獲取tokens(來自示例)中使用的令牌? (我不知道怎麼去標記出TokenStream)的從lucene索引獲取字段標記

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) 

回答

2

TokenSources類是輔助類檢索文檔的令牌突出目的。有兩種方法來檢索給定文件的條款:

  • 重新分析存儲領域,
  • 閱讀文檔的條款載體。

您想使用的方法tries to read the document's terms vector,但由於您未在索引時啓用術語向量而失敗。

因此,您可以在索引時啓用術語向量並繼續使用此方法(請參閱Field constructor和文檔Field.TermVector)或重新分析存儲的字段的內容。第一種方法可以提供更好的性能,特別是對於大型字段,而第二種方法可以節省空間(如果您的字段已經存儲,則沒有額外的信息存儲)。