2010-12-20 5 views
3

私はトークンストリームから来る必要があるフィールドを持っています。それは文字列でインスタンス化することはできませんし、トークンに分析します。たとえば、私のRDBMS内の複数の列のデータを単一のLuceneフィールドに結合することができますが、独自の方法で各列を分析したいと考えています。ですから、それらをすべて単一の文字列として連結し、結果の文字列を分析することはできません。TokenStreamのLuceneフィールドに格納された値

私が今実行している問題は、トークンストリームから作成されたフィールドを格納できないことです。これは、ストリームに明白な文字列表現がない可能性があるためです。しかし、私は文字列表現を知っているので、それを保存したいと思います。

同じフィールドを2回追加してみましたが、1回は格納されていて、文字列データがあり、トークンストリームから来ていましたが、これはできないようです。 "myfield__stored"という名前のフィールドを追加するようなハックは別として、これを行う方法はありますか?

私は2.9.2を使用しています。

答えて

3

私は方法を見つけました。あなたは、通常のフィールドとして、それをインスタンス化しますが、後でSetTokenStreamを呼び出すことによって、それをこっそりすることができます

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

トークンストリーム値がnullの場合はリーダ/文字列値のみがインデックス化されているので、トークンストリーム値がインデックス化されます。ストアメソッドは、トークンストリームに関係なく文字列/読者を調べるので、格納されるこの値になります。

関連する問題