ディレクトリでインデックスを作成したデータを検索するために、Hibernate Search (Lucene を使用) を使用しています。正常に動作しますが、逆検索を行う必要があります。逆検索とは、データベースにクエリのリストが保存されていることを意味し、データ オブジェクトが作成されるたびに、これらのクエリのどれがデータ オブジェクトと一致するかを確認する必要があります。ユーザーが作成したクエリとデータ オブジェクトが一致したときにユーザーに警告する必要があります。したがって、作成したばかりのこの単一のデータ オブジェクトにインデックスを付け、リストのどのクエリが結果としてこのオブジェクトを持っているかを確認する必要があります。
メモリ内にインデックスを作成する Lucene MemoryIndex クラスを見たので、リスト内のすべてのクエリに対して次の例のようなことを行うことができます (ただし、クエリの Java リストでの反復はあまり効率的ではありません)。
//Iterating over my list<Query>
MemoryIndex index = new MemoryIndex();
//Add all fields
index.addField("myField", "myFieldData", analyzer);
...
QueryParser parser = new QueryParser("myField", analyzer);
float score = index.search(query);
if (score > 0.0f) {
System.out.println("it's a match");
} else {
System.out.println("no match found");
}
ここでの問題は、このデータ クラスにはいくつかの Hibernate Search アノテーション @Field、@IndexedEmbedded が含まれていることです。これは、フィールドのインデックス付け方法を示しているため、FullTextEntityManager インスタンスで index() メソッドを呼び出すと、この情報を使用してオブジェクトにインデックスが付けられます。ディレクトリで。この情報を使用してメモリ内でインデックスを作成する同様の方法はありますか?
この逆検索を行うより効率的な方法はありますか?