lucene查询分页总结,利用searchAfter等



lucene查询分页总结,利用searchAfter等

首先介绍IndexSearch几个常用方法,其他search方法的具体含义请查找lucene API

  •                      void search(Collector results)//低版本Lucenesearch方法
  •                      TopDocs search(Query query,int n)//返回前n条结果
  •                      TopDocs searchAfter(ScoreDoc after,Query query,int n)//after以下下查找n条结果

一、利用TopScoreDocCollector进行分页

  •  Query query = MultiFieldQueryParser.parse(Version.LUCENE_35,searchString, fields, clauses, ikAnalyzer);//创建一个查询
  • TopScoreDocCollectortopCollector=TopScoreDocCollector.create(indexSearch.maxDoc(), false);//返回所有条数的一个集合
  • indexSearch.search(query, topCollector);
  • System.out.println("一共有多少条记录命中:"+topCollector.getTotalHits());
  • int start = (page - 1) * pageMaxCount;//start:开始条数   pageMaxCount:显示多少条
  • ScoreDoc[]docs= topCollector.topDocs(start, pageMaxCount).scoreDocs;
  •    for (int i = 0; i < docs.length; i++) {
  • Document doc = indexSearch.doc(docs[i].doc);
  •                 //......获取结果操作
  •    }
   

一、利用 search(Query query,int n)分页

  •      主要思路是先得到前n条结果,然后舍弃前面页码的结果,得到页面的结果
  •      如每页的显示数量:pageCount=10,要查询第10页的结果,那么先查出10*10=100条的结果,丢掉前90条结果就是最终的结果!
  •       //索引排序条件  
  •  SortField[] sortfield = new SortField[] { SortField.FIELD_SCORE,   
  •  new SortField(null,SortField.DOC, true) };  
  •  Sort sort = new Sort(sortfield);    
  •         
  •      TopDocs topDocs = searcher.search(query, null, 10, sort); 
  •  System.out.println("检索到总数:" + topDocs.totalHits);
  •  ScoreDoc[] scoreDocs = topDocs.scoreDocs; 

二、利用searchAfter(ScoreDoc after,Query query,int n)分页

  • Query query=queryParser.parsestr;
  • TopDocs result = indexSearch.searchquery10;
  • intindex=page.getCurrentPage()-1*page.getPageSize();
  •                 ScoreDoc scoreDoc=null;
  •                 //若是当前页是第一页面scoreDoc=null
  •                 ifindex>0{
  •                     //因为索引是从0开端所以要index-1
  •                     scoreDoc=result.scoreDocs[index-1];
  •                 }
  • scoreDoc=result.scoreDocs[index-1];
  • TopDocs hits= indexSearch.searchAfterscoreDoc, query, page.getPageSize())
Please read full article from lucene查询分页总结,利用searchAfter等

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts