Skip to content

Commit 25613a9

Browse files
github-actions[bot]jdnvngaobinlong
committed
Fix: visit of inner query for FunctionScoreQueryBuilder (#16776)
* add visitor logic to FunctionScoreQueryBuilder Signed-off-by: jdnvn <[email protected]> * update changelog Signed-off-by: jdnvn <[email protected]> * add assertion that inner query builder was visited Signed-off-by: Konrad Gołuchowski <[email protected]> --------- Signed-off-by: jdnvn <[email protected]> Signed-off-by: Konrad Gołuchowski <[email protected]> Signed-off-by: gaobinlong <[email protected]> Co-authored-by: jdnvn <[email protected]> Co-authored-by: gaobinlong <[email protected]> (cherry picked from commit 5a4c510) Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent f7aca63 commit 25613a9

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
3333
- Remove FeatureFlags.PLUGGABLE_CACHE as the feature is no longer experimental ([#17344](https://github.com/opensearch-project/OpenSearch/pull/17344))
3434

3535
### Fixed
36+
- Fix visit of inner query for FunctionScoreQueryBuilder ([#16776](https://github.com/opensearch-project/OpenSearch/pull/16776))
3637
- Fix case insensitive and escaped query on wildcard ([#16827](https://github.com/opensearch-project/OpenSearch/pull/16827))
3738
- Fix illegal argument exception when creating a PIT ([#16781](https://github.com/opensearch-project/OpenSearch/pull/16781))
3839

server/src/main/java/org/opensearch/index/query/functionscore/FunctionScoreQueryBuilder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
package org.opensearch.index.query.functionscore;
3434

35+
import org.apache.lucene.search.BooleanClause;
3536
import org.apache.lucene.search.MatchAllDocsQuery;
3637
import org.apache.lucene.search.Query;
3738
import org.opensearch.common.Nullable;
@@ -52,6 +53,7 @@
5253
import org.opensearch.index.query.MatchAllQueryBuilder;
5354
import org.opensearch.index.query.MatchNoneQueryBuilder;
5455
import org.opensearch.index.query.QueryBuilder;
56+
import org.opensearch.index.query.QueryBuilderVisitor;
5557
import org.opensearch.index.query.QueryRewriteContext;
5658
import org.opensearch.index.query.QueryShardContext;
5759

@@ -704,4 +706,12 @@ private static String parseFiltersAndFunctions(
704706
}
705707
return currentFieldName;
706708
}
709+
710+
@Override
711+
public void visit(QueryBuilderVisitor visitor) {
712+
visitor.accept(this);
713+
if (query != null) {
714+
visitor.getChildVisitor(BooleanClause.Occur.MUST).accept(query);
715+
}
716+
}
707717
}

server/src/test/java/org/opensearch/index/query/functionscore/FunctionScoreQueryBuilderTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import org.hamcrest.Matcher;
7676

7777
import java.io.IOException;
78+
import java.util.ArrayList;
7879
import java.util.Arrays;
7980
import java.util.Collection;
8081
import java.util.Collections;
@@ -938,4 +939,15 @@ public void testMustRewrite() throws IOException {
938939
e = expectThrows(IllegalStateException.class, () -> functionQueryBuilder2.toQuery(context));
939940
assertEquals("Rewrite first", e.getMessage());
940941
}
942+
943+
public void testVisit() {
944+
TermQueryBuilder termQueryBuilder = new TermQueryBuilder("unmapped_field", "foo");
945+
FunctionScoreQueryBuilder builder = new FunctionScoreQueryBuilder(termQueryBuilder);
946+
947+
List<QueryBuilder> visitedQueries = new ArrayList<>();
948+
builder.visit(createTestVisitor(visitedQueries));
949+
950+
assertEquals(2, visitedQueries.size());
951+
assertTrue(visitedQueries.contains(termQueryBuilder));
952+
}
941953
}

0 commit comments

Comments
 (0)