次のような状況があります。インデックスを作成するドキュメントのコレクションがあります。しかし、インデックスするものは厳選する必要があります。
選択基準: ドキュメントには、特定のキーワードのいずれかが含まれている必要がありますSet
。
その部分は簡単です。これらのキーワードのいずれかがドキュメントに存在するかどうかを確認してから、ドキュメントにインデックスを付けることができます。トリッキーな状況は (とにかく私にとって!)、これらのキーワードだけをインデックスに登録したいということです。そして、これらのキーワードは複数語にすることも、正規表現にすることもできます。
これらのキーワードがどうなるかは、この投稿では意味がありません。なぜなら、それを抽象化できるからです。インデックスを作成する必要があるキーワードのリストを生成できます。
使用できる既存の TokenStream、Analyzer、Filter の組み合わせはありますか? そうでない場合は、誰かが私を正しい方向に向けてください。
私の質問が十分に明確でない場合:
HashSet<String> impKeywords = new HashSet<String>(new String[] {"Java", "Lucene"});
私が使用するクラスContent
があります。
Content content = new Content("I am only interested in Java, Lucene, Nutch, Luke, CommonLisp.");
そして、一致するキーワードを取得する方法があるとします。
HashSet<String> matchingKeywords = content.getMatchingKeywords(impKeywords); // returns a set with "Java" and "Lucene"
そして、matchingKeywords がある場合にのみ、ドキュメントのインデックス作成に進みます。それで:
if(!matchingKeywords.isEmpty()) {
// prepare document for indexing, and index.
// But what should be my Analyzer and TokenStream?
}
これらの一致するキーワードのみを返す TokenStream を使用して Analyzer を作成できるようにしたいので、これらのトークンのみがインデックス化されます。
終わりの注記: 1 つの可能性として、各ドキュメントに対して、一致するキーワードごとに可変数のフィールドを追加することが考えられます。これらのフィールドはインデックス化されていますが、 を使用して分析されていませんField.Index.NOT_ANALYZED
。ただし、フィールドをいじる代わりに、この目的のために既存の Analyzer/TokenStream を見つけ出すことができればより良いでしょう。