在 Lucene 中高效地执行批量精确匹配查找?

Efficiently performing a bulk exact-match lookup in Lucene?

tl;博士:

使用一组键的精确匹配从 Lucene 批量获取文档的最佳方法是什么?


长版:

我们有一个持久保存到磁盘的 Lucene 索引,通过 DirectoryReader.

读取。

它包含 2,000,000 个具有以下架构的文档:

{"key": "20-character-string", "value": "1-1000-character-string"}

我们现在需要执行 SELECT document WHERE document.key IN $keyArray 的等效操作——即 return 其键与 $keyArray(包含 10,000 项的键数组)相交的文档子集,使用完全匹配。

有没有比执行 10,000 次单独搜索更好的方法?

你应该使用 TermInSetQuery.

在引擎盖下它使用一系列 BooleanQuery 个实例 ORd 在一起,如果你的集合中的术语少于 16 个,否则它使用更有效的东西(大概是各种哈希集)。