【发布时间】:2015-09-23 14:54:40
【问题描述】:
我将 Lucene 索引从使用字符串文档 ID 切换为字节数组。我遇到的问题是系统不再通过他们的 id 找到文档。我怀疑这是因为 lucene 代码没有执行 Array.equals(),而是执行标准的 equals()。这是添加文档的代码:
Document doc = new Document();
byte[] key = indexData.getKey().toByteArray();
System.out.println(Arrays.toString(key));
doc.add(new StoredField(DOCUMENT_PRIMARY_KEY, new BytesRef(key)));
writer.addDocument(doc);
这是删除文档的代码。删除失败,因为找不到文档(尽管它确实存在于索引中)。
void prepareDelete(byte[] documentId) throws IOException {
System.out.println(Arrays.toString(documentId));
Term term =
new Term(DOCUMENT_PRIMARY_KEY, new BytesRef(documentId));
writer.deleteDocuments(term);
}
通过比较 print 语句的输出,我确定键是相同的(即它们包含相同的字节),但它们不共享身份。
我使用的是 Lucene 4.10.3。
【问题讨论】: