【发布时间】:2014-09-11 18:38:40
【问题描述】:
目前我正在使用 Java 平台上的 Lucene 4.9.0 开发高性能 NRT 系统,该系统可检测近乎重复的文本文档。
为此,我查询 Lucene 以返回一组匹配的候选者,并在本地进行近乎重复的计算(通过检索和缓存术语向量)。但我主要关心的是将 Lucene 的 docId(可以更改)绑定到我自己存储在索引中的唯一且不可变的文档 ID 的性能问题。
我的流程如下:
- 在 Lucene 中查询文档
- 对于每个文档:
- 根据 Lucene docId 获取我的唯一文档 ID
- 从缓存中为我的文档 ID 获取术语向量(如果它不存在 - 从 Lucene 中获取它并填充缓存)
- 做数学...
我的主要瓶颈是“获取我的唯一文档 ID” 步骤,这会导致性能大幅下降(尤其是有时我必须在单个循环中计算 40000 个词向量)。
try {
Document document = indexReader.document(id);
return document.getField(ID_FIELD_NAME).numericValue().intValue();
} catch (IOException e) {
throw new IndexException(e);
}
我考虑的可能解决方案是:
- 尝试使用处理唯一且持久的文档标识符的 Zoie,
- 使用 FieldCache(仍然非常低效),
- 使用有效负载(根据http://invertedindex.blogspot.com/2009/04/lucene-dociduid-mapping-and-payload.html) - 但我不知道如何应用它。
还有其他建议吗?
【问题讨论】:
标签: lucene