extensions/net.sf.basedb.varsearch/trunk/src/net/sf/basedb/varsearch/query/AllDocsCollector.java

Code
Comments
Other
Rev Date Author Line
6133 16 Feb 21 nicklas 1 package net.sf.basedb.varsearch.query;
6133 16 Feb 21 nicklas 2
6133 16 Feb 21 nicklas 3 import java.io.IOException;
6248 25 May 21 nicklas 4 import java.util.ArrayList;
6263 28 May 21 nicklas 5 import java.util.Collection;
6263 28 May 21 nicklas 6 import java.util.Comparator;
6263 28 May 21 nicklas 7 import java.util.TreeSet;
6133 16 Feb 21 nicklas 8
6133 16 Feb 21 nicklas 9 import org.apache.lucene.document.Document;
6550 25 Jan 22 nicklas 10 import org.apache.lucene.index.LeafReader;
6133 16 Feb 21 nicklas 11 import org.apache.lucene.index.LeafReaderContext;
6133 16 Feb 21 nicklas 12 import org.apache.lucene.search.ScoreMode;
6133 16 Feb 21 nicklas 13 import org.apache.lucene.search.SimpleCollector;
6133 16 Feb 21 nicklas 14
6133 16 Feb 21 nicklas 15 /**
6133 16 Feb 21 nicklas 16   Collect all matched Documents from the search results. The searcher
6133 16 Feb 21 nicklas 17   will call {@link #collect(int)} for each matched document and we
6133 16 Feb 21 nicklas 18   load it and return it via the list in the constructor.
6133 16 Feb 21 nicklas 19 */
6133 16 Feb 21 nicklas 20 public class AllDocsCollector
6133 16 Feb 21 nicklas 21   extends SimpleCollector
6133 16 Feb 21 nicklas 22 {
6133 16 Feb 21 nicklas 23   
6263 28 May 21 nicklas 24   private final Collection<Document> documents;
6248 25 May 21 nicklas 25   private final int maxHits;
6248 25 May 21 nicklas 26   private int totalHits = 0;
6550 25 Jan 22 nicklas 27   private LeafReader reader;
6133 16 Feb 21 nicklas 28   
6550 25 Jan 22 nicklas 29   public AllDocsCollector(int maxHits, Comparator<Document> sort) 
6133 16 Feb 21 nicklas 30   {
6263 28 May 21 nicklas 31     this.documents = sort == null ? new ArrayList<>() : new TreeSet<>(sort);
6248 25 May 21 nicklas 32     this.maxHits = maxHits;
6133 16 Feb 21 nicklas 33   }
6133 16 Feb 21 nicklas 34   
6248 25 May 21 nicklas 35   /**
6248 25 May 21 nicklas 36     Get all matching documents.
6248 25 May 21 nicklas 37   */
6263 28 May 21 nicklas 38   public Collection<Document> getDocuments()
6248 25 May 21 nicklas 39   {
6248 25 May 21 nicklas 40     return documents;
6248 25 May 21 nicklas 41   }
6248 25 May 21 nicklas 42   
6248 25 May 21 nicklas 43   /**
6248 25 May 21 nicklas 44     Get total number of hits.
6248 25 May 21 nicklas 45   */
6248 25 May 21 nicklas 46   public int getTotalHits()
6248 25 May 21 nicklas 47   {
6248 25 May 21 nicklas 48     return totalHits;
6248 25 May 21 nicklas 49   }
6248 25 May 21 nicklas 50   
6553 27 Jan 22 nicklas 51   /**
6553 27 Jan 22 nicklas 52     Get the max number of hits that are accepted.
6553 27 Jan 22 nicklas 53   */
6553 27 Jan 22 nicklas 54   public int getMaxHits()
6553 27 Jan 22 nicklas 55   {
6553 27 Jan 22 nicklas 56     return maxHits;
6553 27 Jan 22 nicklas 57   }
6553 27 Jan 22 nicklas 58   
6546 24 Jan 22 nicklas 59   public void addDocument(Document doc)
6546 24 Jan 22 nicklas 60   {
6549 25 Jan 22 nicklas 61     if (totalHits < maxHits) documents.add(doc);
6546 24 Jan 22 nicklas 62     totalHits++;
6546 24 Jan 22 nicklas 63   }
6546 24 Jan 22 nicklas 64   
6133 16 Feb 21 nicklas 65   @Override
6133 16 Feb 21 nicklas 66   public void collect(int docId)
6133 16 Feb 21 nicklas 67     throws IOException
6133 16 Feb 21 nicklas 68   {
6248 25 May 21 nicklas 69     if (totalHits < maxHits)
6248 25 May 21 nicklas 70     {
6550 25 Jan 22 nicklas 71       documents.add(reader.document(docId));
6248 25 May 21 nicklas 72     }
6248 25 May 21 nicklas 73     totalHits++;
6133 16 Feb 21 nicklas 74   }
6133 16 Feb 21 nicklas 75   @Override
6133 16 Feb 21 nicklas 76   protected void doSetNextReader(LeafReaderContext context)
6133 16 Feb 21 nicklas 77     throws IOException
6133 16 Feb 21 nicklas 78   {
6550 25 Jan 22 nicklas 79     reader = context.reader();
6133 16 Feb 21 nicklas 80   }
6133 16 Feb 21 nicklas 81   @Override
6133 16 Feb 21 nicklas 82   public ScoreMode scoreMode()
6133 16 Feb 21 nicklas 83   {
6133 16 Feb 21 nicklas 84     return ScoreMode.COMPLETE_NO_SCORES;
6133 16 Feb 21 nicklas 85   }
6133 16 Feb 21 nicklas 86
6133 16 Feb 21 nicklas 87 }