19

我正在使用 Lucene 在 Web 应用程序中显示搜索结果。我也在自定义分页以显示相同的结果。搜索结果可能从 5000 到 10000 或更多。有人可以告诉我分页和缓存搜索结果的最佳策略吗?

4

1 回答 1

31

我建议您不要缓存结果,至少不要在应用程序级别。不过,在具有大量内存的机器上运行 Lucene 操作系统可用于其文件缓存将有所帮助。

只需为每个页面使用不同的偏移量重复搜索。缓存引入了状态性,最终会破坏性能。我们有数百名并发用户搜索超过 4000 万份文档的索引。在不使用显式缓存的情况下,搜索在不到一秒的时间内完成。

使用Hits从搜索返回的对象,您可以像这样访问页面的文档:

Hits hits = searcher.search(query);
int offset = page * recordsPerPage;
int count = Math.min(hits.length() - offset, recordsPerPage);
for (int i = 0; i < count; ++i) {
  Document doc = hits.doc(offset + i);
  ...
}
于 2008-12-08T22:49:27.787 回答