来自TokenStream的Lucene字段具有存储值

时间:2010-12-20 21:43:55

标签: lucene lucene.net

我有一个需要来自令牌流的字段;它不能用字符串实例化,然后分析成令牌。例如,我可能希望将来自多个列(在我的RDBMS中)的数据合并到一个Lucene字段中,但我想以自己的方式分析每个列。因此,我不能简单地将它们全部作为单个字符串连接,然后分析结果字符串。

我现在遇到的问题是无法存储从令牌流创建的字段,这在一般情况下是有意义的,因为流可能没有明显的字符串表示。但是,我知道字符串表示,我想存储它。

我尝试添加相同的字段两次,一次存储并且有字符串数据,一次来自令牌流,但似乎无法完成。除了添加一个名为“myfield__stored”的字段之外,有没有办法做到这一点?

我使用的是2.9.2。

1 个答案:

答案 0 :(得分:3)

我发现了一种方法。您可以通过将其实例化为普通字段但稍后调用SetTokenStream来隐藏它:

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

因为如果令牌流值为null,则仅对读取器/字符串值建立索引,将对令牌流值编制索引。无论令牌流如何,存储方法都会查看字符串/阅读器,因此它将存储此值。