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 |
Calculate the sum of the given field for all matched |
6540 |
17 Jan 22 |
nicklas |
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 |
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 |
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 |
} |