|
25 | 25 | import org.apache.lucene.index.NumericDocValues; |
26 | 26 | import org.apache.lucene.index.ReaderUtil; |
27 | 27 | import org.apache.lucene.index.Term; |
| 28 | +import org.apache.lucene.search.BooleanClause; |
| 29 | +import org.apache.lucene.search.BooleanQuery; |
28 | 30 | import org.apache.lucene.search.DocIdSetIterator; |
| 31 | +import org.apache.lucene.search.DocValuesFieldExistsQuery; |
29 | 32 | import org.apache.lucene.search.IndexSearcher; |
30 | 33 | import org.apache.lucene.search.Query; |
31 | 34 | import org.apache.lucene.search.Sort; |
@@ -154,12 +157,17 @@ private int nextDocId() { |
154 | 157 | } |
155 | 158 |
|
156 | 159 | private TopDocs searchOperations(IndexSearcher searcher) throws IOException { |
157 | | - final Query rangeQuery = LongPoint.newRangeQuery(SeqNoFieldMapper.NAME, fromSeqNo, toSeqNo); |
| 160 | + final Query rangeQuery = new BooleanQuery.Builder() |
| 161 | + .add(new DocValuesFieldExistsQuery(SeqNoFieldMapper.PRIMARY_TERM_NAME), BooleanClause.Occur.FILTER) |
| 162 | + .add(LongPoint.newRangeQuery(SeqNoFieldMapper.NAME, fromSeqNo, toSeqNo), BooleanClause.Occur.FILTER) |
| 163 | + .build(); |
158 | 164 | final Sort sortedBySeqNoThenByTerm = new Sort( |
159 | 165 | new SortedNumericSortField(SeqNoFieldMapper.NAME, SortField.Type.LONG), |
160 | 166 | new SortedNumericSortField(SeqNoFieldMapper.PRIMARY_TERM_NAME, SortField.Type.LONG, true) |
161 | 167 | ); |
162 | | - return searcher.search(rangeQuery, Integer.MAX_VALUE, sortedBySeqNoThenByTerm); |
| 168 | + // nocommit - limits the number of hits |
| 169 | + final long numHits = Math.min((toSeqNo + 1 - fromSeqNo) * 2, Integer.MAX_VALUE - 1); |
| 170 | + return searcher.search(rangeQuery, Math.toIntExact(numHits), sortedBySeqNoThenByTerm); |
163 | 171 | } |
164 | 172 |
|
165 | 173 | private Translog.Operation readDocAsOp(int docID) throws IOException { |
|
0 commit comments