Skip to content

Commit fa4264a

Browse files
committed
Added fix in exists query builder to skip queries generation for virtual fields
Signed-off-by: Mrudhul Guda <gm13@iitbbs.ac.in>
1 parent 0f5537d commit fa4264a

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

modules/mapper-extras/src/main/java/org/opensearch/index/mapper/SearchAsYouTypeFieldMapper.java

+5
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,11 @@ public String typeName() {
454454
public String toString() {
455455
return super.toString() + ",prefixChars=" + minChars + ":" + maxChars;
456456
}
457+
458+
@Override
459+
public Query existsQuery(QueryShardContext context) {
460+
throw new UnsupportedOperationException();
461+
}
457462
}
458463

459464
static final class PrefixFieldMapper extends FieldMapper {

modules/mapper-extras/src/test/java/org/opensearch/index/mapper/SearchAsYouTypeFieldMapperTests.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -563,10 +563,8 @@ public void testNestedExistsQuery() throws IOException {
563563
QueryShardContext queryShardContext = createQueryShardContext(mapperService);
564564
Query actual = new QueryStringQueryBuilder("field:*").toQuery(queryShardContext);
565565
Query expected = new ConstantScoreQuery(
566-
new BooleanQuery.Builder().add(new NormsFieldExistsQuery("field.nested_field"), BooleanClause.Occur.SHOULD)
567-
.add(new NormsFieldExistsQuery("field.nested_field._3gram"), BooleanClause.Occur.SHOULD)
568-
.add(new NormsFieldExistsQuery("field.nested_field._2gram"), BooleanClause.Occur.SHOULD)
569-
.add(new TermQuery(new Term("_field_names", "field.nested_field._index_prefix")), BooleanClause.Occur.SHOULD)
566+
new BooleanQuery.Builder()
567+
.add(new NormsFieldExistsQuery("field.nested_field"), BooleanClause.Occur.SHOULD)
570568
.build()
571569
);
572570
assertEquals(expected, actual);

server/src/main/java/org/opensearch/index/query/ExistsQueryBuilder.java

+5
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ private static Query newObjectFieldExistsQuery(QueryShardContext context, String
201201
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
202202
Collection<String> fields = context.simpleMatchToIndexNames(objField + ".*");
203203
for (String field : fields) {
204+
int dotPos = field.lastIndexOf('.');
205+
if (dotPos > 0 && field.charAt(dotPos + 1) == '_') {
206+
// This is a subfield (e.g. prefix) of a complex field type. Skip it.
207+
continue;
208+
}
204209
Query existsQuery = context.getMapperService().fieldType(field).existsQuery(context);
205210
booleanQuery.add(existsQuery, Occur.SHOULD);
206211
}

0 commit comments

Comments
 (0)