Skip to content

Commit befbe9a

Browse files
SearchService#canMatch takes into consideration the alias filter (#55120)
Co-authored-by: Elastic Machine <[email protected]>
1 parent 38cd668 commit befbe9a

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

server/src/main/java/org/elasticsearch/search/SearchService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,17 +1116,21 @@ public CanMatchResponse canMatch(ShardSearchRequest request) throws IOException
11161116
// we don't want to use the reader wrapper since it could run costly operations
11171117
// and we can afford false positives.
11181118
try (Engine.Searcher searcher = indexShard.acquireCanMatchSearcher()) {
1119+
final boolean aliasFilterCanMatch = request.getAliasFilter()
1120+
.getQueryBuilder() instanceof MatchNoneQueryBuilder == false;
11191121
QueryShardContext context = indexService.newQueryShardContext(request.shardId().id(), searcher,
11201122
request::nowInMillis, request.getClusterAlias());
11211123
Rewriteable.rewrite(request.getRewriteable(), context, false);
11221124
FieldSortBuilder sortBuilder = FieldSortBuilder.getPrimaryFieldSortOrNull(request.source());
11231125
MinAndMax<?> minMax = sortBuilder != null ? FieldSortBuilder.getMinMaxOrNull(context, sortBuilder) : null;
11241126
if (canRewriteToMatchNone(request.source())) {
11251127
QueryBuilder queryBuilder = request.source().query();
1126-
return new CanMatchResponse(queryBuilder instanceof MatchNoneQueryBuilder == false, minMax);
1128+
return new CanMatchResponse(
1129+
aliasFilterCanMatch && queryBuilder instanceof MatchNoneQueryBuilder == false, minMax
1130+
);
11271131
}
11281132
// null query means match_all
1129-
return new CanMatchResponse(true, minMax);
1133+
return new CanMatchResponse(aliasFilterCanMatch, minMax);
11301134
}
11311135
}
11321136

server/src/test/java/org/elasticsearch/search/SearchServiceTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,16 @@ public void testCanMatch() throws IOException, InterruptedException {
673673
ShardSearchRequest request = new ShardSearchRequest(OriginalIndices.NONE, searchRequest, indexShard.shardId(), 1,
674674
new AliasFilter(null, Strings.EMPTY_ARRAY), 1.0f, -1, null, null);
675675

676+
assertAcked(
677+
client().admin().indices().prepareAliases()
678+
.addAlias("index", "alias", new MatchNoneQueryBuilder())
679+
.get()
680+
);
681+
682+
searchRequest.source(new SearchSourceBuilder().query(new MatchAllQueryBuilder()));
683+
assertFalse(service.canMatch(new ShardSearchRequest(OriginalIndices.NONE, searchRequest, indexShard.shardId(), 1,
684+
new AliasFilter(new MatchNoneQueryBuilder(), "alias"), 1f, -1, null, null)).canMatch());
685+
676686
CountDownLatch latch = new CountDownLatch(1);
677687
SearchShardTask task = new SearchShardTask(123L, "", "", "", null, Collections.emptyMap());
678688
service.executeQueryPhase(request, task, new ActionListener<SearchPhaseResult>() {

0 commit comments

Comments
 (0)