知识点
相关文章
更多最近更新
更多Lucene学习笔记之十七:基于searchAfter的实现分页(分页搜索二)
2019-03-28 00:52|来源: lucene菜鸟
先获取上一页的最后一个元素,通过最后一个元素搜索下页的pageSize个元素
public void searchPageByAfter(String query,int pageIndex,int pageSize) { try { Directory dir = FileIndexUtils.getDirectory(); IndexSearcher searcher = getSearcher(dir); QueryParser parser = new QueryParser(Version.LUCENE_35, "content",new StandardAnalyzer(Version.LUCENE_35)); Query q = parser.parse(query);
//先获取上一页的最后一个元素 ScoreDoc lastSd = getLastScoreDoc(pageIndex, pageSize, q, searcher); //通过最后一个元素搜索下页的pageSize个元素 TopDocs tds = searcher.searchAfter(lastSd,q, pageSize); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(sd.doc+":"+doc.get("path")+ "-->"+doc.get("filename")); } searcher.close(); } catch (org.apache.lucene.queryParser.ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 根据页码和分页大小获取上一次的最后一个ScoreDoc */ private ScoreDoc getLastScoreDoc(int pageIndex,int pageSize, Query query,IndexSearcher searcher) throws IOException { if(pageIndex==1)return null;//如果是第一页就返回空 int num = pageSize*(pageIndex-1);//获取上一页的数量 TopDocs tds = searcher.search(query, num); return tds.scoreDocs[num-1]; } |
本文链接:Lucene学习笔记之十七:基于searchAfter的实现分页(分页搜索二),转载请注明出处:http://www.javadx.com/article/789
相关问答
更多-
java分页怎么实现[2022-12-12]
limit 是mysql的 现在基本用的少了 大多数都是子查询实现的 -
zend lucene 怎么实现分页呢? - PHP框架开发[2022-01-28]
MYSQL现在都支持中文的全文检索为什么不用??match against 对一般的网站来说 速度也不是很慢。。或者你直接上JAVA的lucene -
zend lucene 怎么实现分页呢?[2022-02-10]
lucene search出来的hits数组是所有的相关结果hits的大小就是总记录数,然后设置一个自己要在每页显示的条目数,分页组件应该就能生成你要的结果了显示当前页的条目时,需要自己定位到对应的索引位置上 -
excel怎么分页[2022-02-27]
文件>打印预览>分页预览>通过鼠标单击并拖动分页符,可调整每页的位置。 注意,虚线是自动生成的分页符,实线是手工强制的分页符 文件>页面设置>工作表>可以设置打印相关的内容,例如重复出现的表头和列头,例如分页的顺序等等。 -
我不相信你可以创建一个scoredoc然后将它传递给searchAfter。 您需要使用先前搜索返回的ScoreDocs。 I don't believe you can create a scoredoc and then pass it to searchAfter. You need to use the ScoreDocs returned from a previous search.
-
分页搜索结果(pagination searching results)[2022-10-20]
-
分页搜索(Pagination with Search)[2022-05-25]
我想我得到了答案 如果页面变量不包含数字,则抛出500错误。 并使用filter_var函数从post数组中转义页面变量 但根据php.net filter_var只会验证数据不会将其转换为否。 我在phpfiddle中测试它也返回字符串。 var_dump(filter_var('23',FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH)); 因此,在通过is_numeric比较页面之前,您必须将其转换为可以通过以下方式完成的整数 $page = (i ... -
看看这个解释lucene中的分页的博客。 关键在于: int start = 20; int pageSize = 20; Query query = qp.parse(searchTerm); TopDocs hits = searcher.search(query, maxNumberOfResults); for (int i = start; i < start + pageSize && i < hits.Length(); i++) { int docId = hits.sc ...
-
如何将Hibernate Search(Lucene)与分页和ACL结合起来(How to combine Hibernate Search (Lucene) with paging and ACLs)[2023-04-24]
我也遇到了同样的问题,我认为没有一个简单的答案。 我认为只有两种解决方案。 你所建议的那个有你所描述的性能问题,你必须加载文档并解析每个结果的ACL,然后自己进行分页。 另一种方法是将此工作推送到索引端并在Lucene中索引ACL。 这为您提供搜索性能,通过基于当前用户/组/权限/角色添加过滤器术语来隐藏用户无法看到的结果,但代价是使用ACL信息维护索引。 如果您的ACL很简单,那么这可能是一个选项。 如果您的ACL是分层的,那么它仍然是一个选项,但更复杂。 使用ACL保持索引最新也很棘手。 您开始研究这种 ... -
如何分页搜索结果?(How to paginate search result?)[2022-05-25]
我将展示我自己项目分页的例子。 我确实做了一些评论,但他们是法语,因为我是法语,但我认为他们很容易翻译。 我希望这能帮到您。 我不认为你需要我的''configuraiton.php''这是本地服务器连接,无论如何只是试着理解我的例子。 我和我的搜索是3个标准,这就是为什么我有一个开关和案例。 //This is foncitons.php purpose limit items and create page for pagination