我正在使用Lucene在Web应用程序中显示搜索结果。我也是自定义分页以显示相同的内容。 搜索结果可能在5000到10000或更多之间。 有人可以告诉我分页和缓存搜索结果的最佳策略吗?
答案 0 :(得分:32)
我建议你不要缓存结果,至少不要在应用程序级别。在具有大量内存的盒子上运行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);
...
}