2009-08-03 12 views
1

私は誰かが作成したLuceneインデックスから始めています。私は与えられた言葉に続くすべての言葉を見つけたいと思います。私は、インデックスから関心の用語(org.apache.lucene.index.Term)を抽出してきた、と私はその用語を含む文書を検索することができます。Luceneインデックスから次の用語を引き出す方法は?

segmentTermDocs = segmentReader.termDocs(term); 
while (segmentTermDocs.next) { 
     doc = segmentReader.document(segmentTermDocs.doc); 
... 
} 

は私が見つけることのための方法はあります文書中の用語の位置を特定し、それに続く用語を抽出するか?

答えて

1

あなたの状況では、nグラムの索引付けはオプションではないので、いくつかの力ずくが必要になります。 IndexReader's terms and termPositionsを列挙することもできますが、それは控えめに遅くなる可能性があります。

より速いアプローチは、用語を列挙し、MultiPhraseQueryを使用して一度にグループをチェックすることによって、分割および征服検索アルゴリズムを実装することです。すべての潜在的な用語を合理的なサイズのグループ(たとえば1000)に分割し、各チャンクと接頭辞ワードでMultiPhraseQuery検索を実行します。ヒットがある場合は、単一の用語に達するまでサブグループを再帰的に呼び出します。

+0

アイデアありがとう!これはレポートを生成するためのものなので、パフォーマンスは実際問題ではありません。私は、ブルートフォース検索を行い、興味のある言葉と索引の他のすべての用語で構成されるPhraseQuerysを作成しました。ヒットしたクエリは、対象期間に続いた用語を示しました。 –

関連する問題