【问题标题】:Paging Lucene's search results分页 Lucene 的搜索结果
【发布时间】:2008-12-08 22:29:29
【问题描述】:

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

【问题讨论】:

标签: lucene


【解决方案1】:

我建议您不要缓存结果,至少不要在应用程序级别。不过,在具有大量内存(操作系统可用于其文件缓存)的机器上运行 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);
  ...
}

【讨论】:

  • 你好 erickson.. 你能告诉我从哪个版本开始 lucene 支持仅采用 1 个查询参数的搜索方法..并且也可以使用此解决方案进行排序.???
  • @AshaKosht​​i 永远?它存在于 2004 年发布的 1.4.3 中。我在档案中找不到比该版本更旧的版本。是的,Searcher 上也有 search(Query, Sort) 过载。
  • @erickson ..它在 1.4.3 中有这三个版本的搜索 .. 1) TopDocs search(Query query, Filter filter, int nDocs) 2) TopFieldDocs search(Query query, Filter filter, int nDocs, Sort sort) 3) void search(Query query, Filter filter, HitCollector results).. 我找不到你所说的那个,即 searcher.search(query); ..??..
  • @AshaKosht​​i 您正在查看Searchable 界面。我指的是org.apache.lucene.search.Searcher 类中声明的方法。
  • @erickson .. 它在 1.4.3 版本中可用。但之后即使在稳定版本 3.5 或最新的 4.0 版本中也不可用 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2014-03-26
  • 2017-02-24
相关资源
最近更新 更多