假设我在 Lucene.Net 3.0.3 中有一个匹配 1,000,000 个文档的查询,并且每个文档都有一个名为 ProductID 且具有唯一值的字段。如何在特定 ProductID 之后立即获取接下来的 10 个项目?
例如,在 ProductID 4264423 之后抓住我接下来的 10 个项目。ProductID
可以是 1,000,000 个匹配项中的任何位置,并且可以按照我的意愿进行排序。
一种蛮力解决方案是遍历所有 ScoreDocs,并使用 FieldCache 找到正确的 ProductID,然后获取下一个 10。但是,这似乎效率低下,因为我们需要填充一个巨大的 ScoreDocs 数组。
另一个想法是使用自定义收集器以及 FieldCache 来查找正确的 ProductID,但据我所知,收集器没有排序。
也许解决方案是使用自定义收集器与 PriorityQueue 的组合,使用 FieldCache 找到正确的 ProductID,记下该文档的分数,然后根据分数获取接下来的 10 个项目。(虽然,如果有类似的 Score 值,如何处理?)
请提供代码示例,因为我是 Lucene.Net 新手。(示例代码最好在 C# 中。)
如果自定义收集器 + PriorityQueue 是一个可行的选项,这里有一些示例代码可以提供帮助:https ://stackoverflow.com/a/7938433/1145177