我有一个特定的 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
实际上是删除具有匹配哈希码的文档并再次添加相同的文档,所以这没有任何用处。
解决这个问题的方法是什么?