Skip to content

Commit 2b9a968

Browse files
authored
Add query argument in QueryCollectorContextSpecFactory (#19153)
* Add query in QueryCollectorContextSpecFactory Signed-off-by: vibrantvarun <jainvarun4996@gmail.com> * Add javadoc Signed-off-by: vibrantvarun <jainvarun4996@gmail.com> --------- Signed-off-by: vibrantvarun <jainvarun4996@gmail.com>
1 parent eae84a4 commit 2b9a968

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

server/src/main/java/org/opensearch/search/query/QueryCollectorContextSpecFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.opensearch.search.query;
1010

11+
import org.apache.lucene.search.Query;
1112
import org.opensearch.common.annotation.ExperimentalApi;
1213
import org.opensearch.search.internal.SearchContext;
1314

@@ -21,12 +22,14 @@
2122
public interface QueryCollectorContextSpecFactory {
2223
/**
2324
* @param searchContext context needed to create collector context spec
25+
* @param query required to create collector context spec
2426
* @param queryCollectorArguments arguments to create collector context spec
2527
* @return QueryCollectorContextSpec
2628
* @throws IOException
2729
*/
2830
Optional<QueryCollectorContextSpec> createQueryCollectorContextSpec(
2931
SearchContext searchContext,
32+
Query query,
3033
QueryCollectorArguments queryCollectorArguments
3134
) throws IOException;
3235
}

server/src/main/java/org/opensearch/search/query/QueryCollectorContextSpecRegistry.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.opensearch.search.query;
1010

11+
import org.apache.lucene.search.Query;
1112
import org.opensearch.search.internal.SearchContext;
1213

1314
import java.io.IOException;
@@ -43,18 +44,24 @@ public static void registerFactory(QueryCollectorContextSpecFactory factory) {
4344
/**
4445
* Get collector context spec
4546
* @param searchContext search context
47+
* @param query required to create collectorContext spec
4648
* @param queryCollectorArguments query collector arguments
4749
* @return collector context spec
4850
* @throws IOException
4951
*/
5052
public static Optional<QueryCollectorContextSpec> getQueryCollectorContextSpec(
5153
final SearchContext searchContext,
54+
final Query query,
5255
final QueryCollectorArguments queryCollectorArguments
5356
) throws IOException {
5457
Iterator<QueryCollectorContextSpecFactory> iterator = registry.iterator();
5558
while (iterator.hasNext()) {
5659
QueryCollectorContextSpecFactory factory = iterator.next();
57-
Optional<QueryCollectorContextSpec> spec = factory.createQueryCollectorContextSpec(searchContext, queryCollectorArguments);
60+
Optional<QueryCollectorContextSpec> spec = factory.createQueryCollectorContextSpec(
61+
searchContext,
62+
query,
63+
queryCollectorArguments
64+
);
5865
if (spec.isEmpty() == false) {
5966
return spec;
6067
}

server/src/main/java/org/opensearch/search/query/QueryPhase.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,16 @@ protected boolean searchWithCollector(
446446
boolean hasFilterCollector,
447447
boolean hasTimeout
448448
) throws IOException {
449-
QueryCollectorContext queryCollectorContext = getQueryCollectorContext(searchContext, hasFilterCollector);
449+
QueryCollectorContext queryCollectorContext = getQueryCollectorContext(searchContext, query, hasFilterCollector);
450450
return searchWithCollector(searchContext, searcher, query, collectors, queryCollectorContext, hasFilterCollector, hasTimeout);
451451
}
452452

453-
private QueryCollectorContext getQueryCollectorContext(SearchContext searchContext, boolean hasFilterCollector) throws IOException {
453+
private QueryCollectorContext getQueryCollectorContext(SearchContext searchContext, Query query, boolean hasFilterCollector)
454+
throws IOException {
454455
// create the top docs collector last when the other collectors are known
455456
final Optional<QueryCollectorContext> queryCollectorContextOpt = QueryCollectorContextSpecRegistry.getQueryCollectorContextSpec(
456457
searchContext,
458+
query,
457459
new QueryCollectorArguments.Builder().hasFilterCollector(hasFilterCollector).build()
458460
).map(queryCollectorContextSpec -> new QueryCollectorContext(queryCollectorContextSpec.getContextName()) {
459461
@Override

server/src/test/java/org/opensearch/search/query/QueryCollectorContextSpecRegistryTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@ public void testGetQueryCollectorContextSpec_WithValidSpec() throws IOException
4949
QueryCollectorArguments mockArguments = new QueryCollectorArguments.Builder().build();
5050
// Given
5151
QueryCollectorContextSpecRegistry.registerFactory(mockFactory1);
52-
when(mockFactory1.createQueryCollectorContextSpec(mockSearchContext, mockArguments)).thenReturn(Optional.of(mockSpec));
52+
when(mockFactory1.createQueryCollectorContextSpec(mockSearchContext, mockSearchContext.query(), mockArguments)).thenReturn(
53+
Optional.of(mockSpec)
54+
);
5355

5456
// When
5557
Optional<QueryCollectorContextSpec> result = QueryCollectorContextSpecRegistry.getQueryCollectorContextSpec(
5658
mockSearchContext,
59+
mockSearchContext.query(),
5760
mockArguments
5861
);
5962

@@ -69,6 +72,7 @@ public void testGetQueryCollectorContextSpec_NoFactories() throws IOException {
6972
// When
7073
Optional<QueryCollectorContextSpec> result = QueryCollectorContextSpecRegistry.getQueryCollectorContextSpec(
7174
mockSearchContext,
75+
mockSearchContext.query(),
7276
mockArguments
7377
);
7478

0 commit comments

Comments
 (0)