2010-12-20 61 views
3

我有一個字段需要來自令牌流;它不能用字符串實例化,然後分析成令牌。例如,我可能想要將來自多個列(在我的RDBMS中)的數據合併到一個Lucene字段中,但我想按自己的方式分析每個列。所以我不能簡單地將它們全部作爲單個字符串連接,然後分析結果字符串。TokenStream的Lucene字段與存儲的值

我現在遇到的問題是無法存儲從令牌流創建的字段,這在一般情況下很有意義,因爲流可能沒有明顯的字符串表示形式。但是,我知道字符串表示,並且我想存儲它。

我嘗試添加相同的字段兩次,一旦它被存儲並且有字符串數據,並且它來自一個標記流,但似乎這不能完成。除了像添加名爲「myfield__stored」的字段這樣的黑客攻擊之外,還有什麼辦法可以做到這一點?

我使用的是2.9.2。

回答

3

我找到了一種方法。您可以通過實例它作爲一個正常的字段,但稍後再打SetTokenStream瞞天過海:

Field f = new Field(Name, StringValue, Store, Analyzed, TV); 
f.SetTokenStream(TokenStreamValue); 

因爲如果令牌流值爲null讀/字符串值只索引,令牌流的該值將被索引。商店方法查看字符串/閱讀器,而不考慮令牌流,因此將存儲該值。