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

Code
Comments
Other
Rev Date Author Line
6540 17 Jan 22 nicklas 1 package net.sf.basedb.varsearch.query;
6540 17 Jan 22 nicklas 2
6540 17 Jan 22 nicklas 3 import java.io.IOException;
6540 17 Jan 22 nicklas 4
6550 25 Jan 22 nicklas 5 import org.apache.lucene.index.LeafReader;
6540 17 Jan 22 nicklas 6 import org.apache.lucene.index.LeafReaderContext;
6540 17 Jan 22 nicklas 7 import org.apache.lucene.search.ScoreMode;
6540 17 Jan 22 nicklas 8 import org.apache.lucene.search.SimpleCollector;
6540 17 Jan 22 nicklas 9
6540 17 Jan 22 nicklas 10 import net.sf.basedb.util.Values;
6540 17 Jan 22 nicklas 11
6540 17 Jan 22 nicklas 12 /**
6540 17 Jan 22 nicklas 13   Calculate the sum of the given field for all matched
6540 17 Jan 22 nicklas 14   documents.
6540 17 Jan 22 nicklas 15 */
6540 17 Jan 22 nicklas 16 public class SumFieldCollector
6540 17 Jan 22 nicklas 17   extends SimpleCollector
6540 17 Jan 22 nicklas 18 {
6540 17 Jan 22 nicklas 19   
6540 17 Jan 22 nicklas 20   private final String field;
6550 25 Jan 22 nicklas 21   private LeafReader reader;
6540 17 Jan 22 nicklas 22   private int totalHits = 0;
6540 17 Jan 22 nicklas 23   private long sum = 0;
6540 17 Jan 22 nicklas 24   
6550 25 Jan 22 nicklas 25   public SumFieldCollector(String field) 
6540 17 Jan 22 nicklas 26   {
6540 17 Jan 22 nicklas 27     this.field = field;
6540 17 Jan 22 nicklas 28   }
6540 17 Jan 22 nicklas 29   
6540 17 Jan 22 nicklas 30   /**
6540 17 Jan 22 nicklas 31     Get the sum.
6540 17 Jan 22 nicklas 32   */
6540 17 Jan 22 nicklas 33   public long getSum()
6540 17 Jan 22 nicklas 34   {
6540 17 Jan 22 nicklas 35     return sum;
6540 17 Jan 22 nicklas 36   }
6540 17 Jan 22 nicklas 37   
6540 17 Jan 22 nicklas 38   /**
6540 17 Jan 22 nicklas 39     Get total number of hits.
6540 17 Jan 22 nicklas 40   */
6540 17 Jan 22 nicklas 41   public int getTotalHits()
6540 17 Jan 22 nicklas 42   {
6540 17 Jan 22 nicklas 43     return totalHits;
6540 17 Jan 22 nicklas 44   }
6540 17 Jan 22 nicklas 45   
6540 17 Jan 22 nicklas 46   @Override
6540 17 Jan 22 nicklas 47   public void collect(int docId)
6540 17 Jan 22 nicklas 48     throws IOException
6540 17 Jan 22 nicklas 49   {
6550 25 Jan 22 nicklas 50     String val = reader.document(docId).get(field);
6540 17 Jan 22 nicklas 51     if (val != null)
6540 17 Jan 22 nicklas 52     {
6540 17 Jan 22 nicklas 53       totalHits++;
6540 17 Jan 22 nicklas 54       sum += Values.getLong(val);
6540 17 Jan 22 nicklas 55     }
6540 17 Jan 22 nicklas 56   }
6540 17 Jan 22 nicklas 57   @Override
6540 17 Jan 22 nicklas 58   protected void doSetNextReader(LeafReaderContext context)
6540 17 Jan 22 nicklas 59     throws IOException
6540 17 Jan 22 nicklas 60   {
6550 25 Jan 22 nicklas 61     reader = context.reader();
6540 17 Jan 22 nicklas 62   }
6540 17 Jan 22 nicklas 63   @Override
6540 17 Jan 22 nicklas 64   public ScoreMode scoreMode()
6540 17 Jan 22 nicklas 65   {
6540 17 Jan 22 nicklas 66     return ScoreMode.COMPLETE_NO_SCORES;
6540 17 Jan 22 nicklas 67   }
6540 17 Jan 22 nicklas 68
6540 17 Jan 22 nicklas 69 }