1

Lucene インデックスから内でTokenStream使用されたトークン (トークンのリスト、 、またはその他のもの)を取得するにはどうすればよいですか? つまり、(例から) で使用されたトークンをインデックスから取得することは可能ですか? (からトークンを取得する方法は知りません)FieldDocumenttokensTokenStream

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

ドキュメントにはありますがField.tokenStreamValue()doc.getFieldable(field_name)そうすると単に返されますnull

私も試しました(luceneの3番目のコメントから- 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クラスは、強調表示のためにドキュメントのトークンを取得するためのヘルパー クラスです特定のドキュメントの用語を取得するには、次の 2 つの方法があります。

  • 保存されたフィールドの再分析、
  • ドキュメントの用語ベクトルを読み取ります。

使用したいメソッドはドキュメントの用語 vector を読み取ろうとしますが、インデックス作成時に用語ベクトルを有効にしていないため失敗します。

そのため、インデックス作成時に項ベクトルを有効にしてこのメ​​ソッドを使い続けるか ( Field コンストラクターとField.TermVectorのドキュメントを参照)、格納されたフィールドのコンテンツを再分析することができます。最初の方法は、特に大きなフィールドの場合にパフォーマンスが向上する可能性がありますが、2 番目の方法はスペースを節約します (フィールドが既に保存されている場合は、保存する追加情報はありません)。

于 2012-03-20T08:53:09.667 に答える