Skip to content

Commit 8b05f34

Browse files
committed
HSEARCH-4070 Take the configured totalHitCountThreshold into account for Lucene scrolls
Signed-off-by: Yoann Rodière <yoann@hibernate.org>
1 parent 4239b94 commit 8b05f34

File tree

7 files changed

+19
-11
lines changed

7 files changed

+19
-11
lines changed

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchQueryImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,7 @@ public LuceneSearchScroll<H> scroll(int chunkSize) {
121121
HibernateSearchMultiReader indexReader = HibernateSearchMultiReader.open(
122122
indexNames, searchContext.indexes().elements(), routingKeys );
123123
return new LuceneSearchScrollImpl<>( queryOrchestrator, workFactory, searchContext, routingKeys, timeoutManager,
124-
searcher, indexReader, chunkSize
125-
);
124+
searcher, totalHitCountThreshold( true ), indexReader, chunkSize );
126125
}
127126

128127
@Override

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearchScrollImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class LuceneSearchScrollImpl<H> implements LuceneSearchScroll<H> {
3636
private final Set<String> routingKeys;
3737
private final LuceneTimeoutManager timeoutManager;
3838
private final LuceneSearcher<LuceneLoadableSearchResult<H>, LuceneExtractableSearchResult<H>> searcher;
39+
private final int totalHitCountThreshold;
3940

4041
// specific to this scroll instance:
4142
private final HibernateSearchMultiReader indexReader;
@@ -51,13 +52,15 @@ public LuceneSearchScrollImpl(LuceneSyncWorkOrchestrator queryOrchestrator,
5152
Set<String> routingKeys,
5253
LuceneTimeoutManager timeoutManager,
5354
LuceneSearcher<LuceneLoadableSearchResult<H>, LuceneExtractableSearchResult<H>> searcher,
55+
int totalHitCountThreshold,
5456
HibernateSearchMultiReader indexReader, int chunkSize) {
5557
this.queryOrchestrator = queryOrchestrator;
5658
this.workFactory = workFactory;
5759
this.searchContext = searchContext;
5860
this.routingKeys = routingKeys;
5961
this.timeoutManager = timeoutManager;
6062
this.searcher = searcher;
63+
this.totalHitCountThreshold = totalHitCountThreshold;
6164
this.indexReader = indexReader;
6265
this.chunkSize = chunkSize;
6366
this.currentPageLimit = chunkSize * 4; // Will fetch the topdocs for the first 4 pages initially
@@ -90,7 +93,9 @@ private LuceneSearchScrollResult<H> doNext() {
9093
currentPageLimit *= 2;
9194
}
9295
currentPageOffset = nextChunkOffset;
93-
currentPage = doSubmitWithIndexReader( workFactory.scroll( searcher, currentPageOffset, currentPageLimit ), indexReader );
96+
currentPage = doSubmitWithIndexReader(
97+
workFactory.scroll( searcher, currentPageOffset, currentPageLimit, totalHitCountThreshold ),
98+
indexReader );
9499
}
95100

96101
int nextChunkStartIndexInPage = nextChunkOffset - currentPageOffset;

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/impl/LuceneSearcherImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@ public LuceneLoadableSearchResult<H> search(IndexSearcher indexSearcher,
7474

7575
@Override
7676
public LuceneExtractableSearchResult<H> scroll(IndexSearcher indexSearcher,
77-
IndexReaderMetadataResolver metadataResolver, int offset, int limit) throws IOException {
78-
return doSearch( indexSearcher, metadataResolver, offset, limit, Integer.MAX_VALUE );
77+
IndexReaderMetadataResolver metadataResolver,
78+
int offset, int limit, int totalHitCountThreshold) throws IOException {
79+
return doSearch( indexSearcher, metadataResolver, offset, limit, totalHitCountThreshold );
7980
}
8081

8182
private LuceneExtractableSearchResult<H> doSearch(IndexSearcher indexSearcher,

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/work/impl/LuceneSearcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ R search(IndexSearcher indexSearcher, IndexReaderMetadataResolver metadataResolv
2121
int offset, Integer limit, int totalHitCountThreshold) throws IOException;
2222

2323
ER scroll(IndexSearcher indexSearcher, IndexReaderMetadataResolver metadataResolver,
24-
int offset, int limit) throws IOException;
24+
int offset, int limit, int totalHitCountThreshold) throws IOException;
2525

2626
int count(IndexSearcher indexSearcher) throws IOException;
2727

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/work/impl/LuceneWorkFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ SingleDocumentIndexingWork update(String tenantId, String entityTypeName, Object
4040

4141
<R> ReadWork<R> search(LuceneSearcher<R, ?> searcher, Integer offset, Integer limit, int totalHitCountThreshold);
4242

43-
<ER> ReadWork<ER> scroll(LuceneSearcher<?, ER> searcher, int offset, int limit);
43+
<ER> ReadWork<ER> scroll(LuceneSearcher<?, ER> searcher, int offset, int limit, int totalHitCountThreshold);
4444

4545
ReadWork<Integer> count(LuceneSearcher<?, ?> searcher);
4646

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/work/impl/LuceneWorkFactoryImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ public <R> ReadWork<R> search(LuceneSearcher<R, ?> searcher, Integer offset, Int
9999
}
100100

101101
@Override
102-
public <ER> ReadWork<ER> scroll(LuceneSearcher<?, ER> searcher, int offset, int limit) {
103-
return new ScrollWork<>( searcher, offset, limit );
102+
public <ER> ReadWork<ER> scroll(LuceneSearcher<?, ER> searcher, int offset, int limit, int totalHitCountThreshold) {
103+
return new ScrollWork<>( searcher, offset, limit, totalHitCountThreshold );
104104
}
105105

106106
@Override

backend/lucene/src/main/java/org/hibernate/search/backend/lucene/work/impl/ScrollWork.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,22 @@ public class ScrollWork<ER> implements ReadWork<ER> {
2323

2424
private final int offset;
2525
private final int limit;
26+
private final int totalHitCountThreshold;
2627

27-
ScrollWork(LuceneSearcher<?, ER> searcher, int offset, int limit) {
28+
ScrollWork(LuceneSearcher<?, ER> searcher, int offset, int limit, int totalHitCountThreshold) {
2829
this.offset = offset;
2930
this.limit = limit;
3031
this.searcher = searcher;
32+
this.totalHitCountThreshold = totalHitCountThreshold;
3133
}
3234

3335
@Override
3436
public ER execute(ReadWorkExecutionContext context) {
3537
try {
3638
IndexSearcher indexSearcher = context.createSearcher();
3739

38-
return searcher.scroll( indexSearcher, context.getIndexReaderMetadataResolver(), offset, limit );
40+
return searcher.scroll( indexSearcher, context.getIndexReaderMetadataResolver(), offset, limit,
41+
totalHitCountThreshold );
3942
}
4043
catch (IOException e) {
4144
throw log.ioExceptionOnQueryExecution( searcher.getLuceneQueryForExceptions(), context.getEventContext(), e );

0 commit comments

Comments
 (0)