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 |
Collect all matched Documents from the search results. The searcher |
6133 |
16 Feb 21 |
nicklas |
will call {@link #collect(int)} for each matched document and we |
6133 |
16 Feb 21 |
nicklas |
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 |
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 |
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 |
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 |
} |