次のような特定の SQL 結合があります。
select DISTINCT ... 100 columns
from ... 10 tabes, some left joins
現在、Toad を使用してこのクエリの結果を XML にエクスポートしています (後で Java から直接クエリを実行します)。Java を使用して XML ファイルを解析し、Lucene (Java) を使用してインデックスを作成し、Lucene インデックスを検索します。これはうまく機能します。データベースからクエリを実行するよりも 6 ~ 10 倍速く結果が得られます。
データベース内のデータが変更されたときに、このインデックスを段階的に更新する方法を考える必要があります。
テーブルを結合しているため (特に左結合)、増分更新を行うための一意のビジネス キーの組み合わせを取得できるかどうかわかりません。一方、私は DISTINCT を使用しているため、すべてのフィールドが一意の組み合わせであることを知っています。この情報を考慮してhashCode
、ドキュメントの をドキュメントのフィールドとして配置し、次updateDocument
のIndexWriter
ように呼び出すことができると考えました。
public static void addDoc(IndexWriter w, Row row) throws IOException {
//Row is simply a java representation of a single row from the above query
Document document = new Document();
document.add(new StringField("fieldA", row.fieldA, Field.Store.YES));
...
String hashCode = String.valueOf(document.hashCode());
document.add(new StringField("HASH", hashCode, Field.Store.YES));
w.updateDocument(new Term("HASH", hashCode), document);
}
その後、ハッシュコードが一致するドキュメントを実際に削除し、同じドキュメントを再度追加していることに気付いたupdateDocument
ので、これは役に立ちませんでした。
これにアプローチする方法は何ですか?