Skip to content

Commit ce95728

Browse files
luyunchengtandonks
authored andcommitted
[BUG FIX] Fix the visit of sub queries for HasParentQuery and HasChildQuery (opensearch-project#18621)
* ADD Parent-Join visit method. Signed-off-by: luyuncheng <luyuncheng@bytedance.com> * ADD Parent-Join visit method. Signed-off-by: luyuncheng <luyuncheng@bytedance.com> * ADD Parent-Join visit method. Signed-off-by: luyuncheng <luyuncheng@bytedance.com> * ADD Parent-Join visit method. Signed-off-by: luyuncheng <luyuncheng@bytedance.com> --------- Signed-off-by: luyuncheng <luyuncheng@bytedance.com>
1 parent becf8a5 commit ce95728

File tree

5 files changed

+39
-0
lines changed

5 files changed

+39
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
3434
- Add task cancellation checks in aggregators ([#18426](https://github.com/opensearch-project/OpenSearch/pull/18426))
3535
- Fix concurrent timings in profiler ([#18540](https://github.com/opensearch-project/OpenSearch/pull/18540))
3636
- Cannot communicate with HTTP/2 when reactor-netty is enabled ([#18599](https://github.com/opensearch-project/OpenSearch/pull/18599))
37+
- Fix the visit of sub queries for HasParentQuery and HasChildQuery ([#18621](https://github.com/opensearch-project/OpenSearch/pull/18621))
38+
3739

3840
### Security
3941

modules/parent-join/src/main/java/org/opensearch/join/query/HasChildQueryBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.lucene.index.DirectoryReader;
3535
import org.apache.lucene.index.IndexReader;
3636
import org.apache.lucene.index.OrdinalMap;
37+
import org.apache.lucene.search.BooleanClause;
3738
import org.apache.lucene.search.IndexSearcher;
3839
import org.apache.lucene.search.MatchNoDocsQuery;
3940
import org.apache.lucene.search.Query;
@@ -58,6 +59,7 @@
5859
import org.opensearch.index.query.InnerHitContextBuilder;
5960
import org.opensearch.index.query.NestedQueryBuilder;
6061
import org.opensearch.index.query.QueryBuilder;
62+
import org.opensearch.index.query.QueryBuilderVisitor;
6163
import org.opensearch.index.query.QueryRewriteContext;
6264
import org.opensearch.index.query.QueryShardContext;
6365
import org.opensearch.index.query.QueryShardException;
@@ -551,4 +553,10 @@ protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> inner
551553
innerHits.put(name, innerHitContextBuilder);
552554
}
553555
}
556+
557+
@Override
558+
public void visit(QueryBuilderVisitor visitor) {
559+
visitor.accept(this);
560+
query.visit(visitor.getChildVisitor(BooleanClause.Occur.MUST));
561+
}
554562
}

modules/parent-join/src/main/java/org/opensearch/join/query/HasParentQueryBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
package org.opensearch.join.query;
3333

34+
import org.apache.lucene.search.BooleanClause;
3435
import org.apache.lucene.search.MatchNoDocsQuery;
3536
import org.apache.lucene.search.Query;
3637
import org.apache.lucene.search.join.ScoreMode;
@@ -48,6 +49,7 @@
4849
import org.opensearch.index.query.InnerHitBuilder;
4950
import org.opensearch.index.query.InnerHitContextBuilder;
5051
import org.opensearch.index.query.QueryBuilder;
52+
import org.opensearch.index.query.QueryBuilderVisitor;
5153
import org.opensearch.index.query.QueryRewriteContext;
5254
import org.opensearch.index.query.QueryShardContext;
5355
import org.opensearch.index.query.QueryShardException;
@@ -331,4 +333,9 @@ protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> inner
331333
}
332334
}
333335

336+
@Override
337+
public void visit(QueryBuilderVisitor visitor) {
338+
visitor.accept(this);
339+
query.visit(visitor.getChildVisitor(BooleanClause.Occur.MUST));
340+
}
334341
}

modules/parent-join/src/test/java/org/opensearch/join/query/HasChildQueryBuilderTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@
6969
import org.opensearch.test.VersionUtils;
7070

7171
import java.io.IOException;
72+
import java.util.ArrayList;
7273
import java.util.Arrays;
7374
import java.util.Collection;
7475
import java.util.Collections;
7576
import java.util.HashMap;
77+
import java.util.List;
7678
import java.util.Map;
7779

7880
import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
@@ -392,4 +394,13 @@ public void testDisallowExpensiveQueries() {
392394
OpenSearchException e = expectThrows(OpenSearchException.class, () -> queryBuilder.toQuery(queryShardContext));
393395
assertEquals("[joining] queries cannot be executed when 'search.allow_expensive_queries' is set to false.", e.getMessage());
394396
}
397+
398+
public void testVisit() {
399+
HasChildQueryBuilder builder = doCreateTestQueryBuilder();
400+
401+
List<QueryBuilder> visitedQueries = new ArrayList<>();
402+
builder.visit(createTestVisitor(visitedQueries));
403+
404+
assertEquals(2, visitedQueries.size());
405+
}
395406
}

modules/parent-join/src/test/java/org/opensearch/join/query/HasParentQueryBuilderTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@
5858
import org.opensearch.test.VersionUtils;
5959

6060
import java.io.IOException;
61+
import java.util.ArrayList;
6162
import java.util.Arrays;
6263
import java.util.Collection;
6364
import java.util.Collections;
6465
import java.util.HashMap;
66+
import java.util.List;
6567
import java.util.Map;
6668

6769
import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
@@ -290,4 +292,13 @@ public void testDisallowExpensiveQueries() {
290292
OpenSearchException e = expectThrows(OpenSearchException.class, () -> queryBuilder.toQuery(queryShardContext));
291293
assertEquals("[joining] queries cannot be executed when 'search.allow_expensive_queries' is set to false.", e.getMessage());
292294
}
295+
296+
public void testVisit() {
297+
HasParentQueryBuilder builder = doCreateTestQueryBuilder();
298+
299+
List<QueryBuilder> visitedQueries = new ArrayList<>();
300+
builder.visit(createTestVisitor(visitedQueries));
301+
302+
assertEquals(2, visitedQueries.size());
303+
}
293304
}

0 commit comments

Comments
 (0)