@Nullable
public ToParentBlockJoinQuery build() throws IOException {
Query innerQuery;
if (queryFound) {
innerQuery = getInnerQuery();
} else if (filterFound) {
Query innerFilter = getInnerFilter();
if (innerFilter != null) {
innerQuery = new ConstantScoreQuery(getInnerFilter());
} else {
innerQuery = null;
}
} else {
throw new QueryParsingException(parseContext, "[nested] requires either 'query' or 'filter' field");
}
if (innerHits != null) {
ParsedQuery parsedQuery = new ParsedQuery(innerQuery, parseContext.copyNamedQueries());
InnerHitsContext.NestedInnerHits nestedInnerHits = new InnerHitsContext.NestedInnerHits(innerHits.getSubSearchContext(), parsedQuery, null, getParentObjectMapper(), nestedObjectMapper);
String name = innerHits.getName() != null ? innerHits.getName() : path;
parseContext.addInnerHits(name, nestedInnerHits);
}
if (innerQuery != null) {
return new ToParentBlockJoinQuery(Queries.filtered(innerQuery, childFilter), parentFilter, scoreMode);
} else {
return null;
}
}