public ESToParentBlockJoinQuery(Query childQuery, BitSetProducer parentsFilter, ScoreMode scoreMode, String path) { this(new ToParentBlockJoinQuery(childQuery, parentsFilter, scoreMode), path); }
public ESToParentBlockJoinQuery(Query childQuery, BitSetProducer parentsFilter, ScoreMode scoreMode, String path) { this(new ToParentBlockJoinQuery(childQuery, parentsFilter, scoreMode), path); }
public ESToParentBlockJoinQuery(Query childQuery, BitSetProducer parentsFilter, ScoreMode scoreMode, String path) { this(new ToParentBlockJoinQuery(childQuery, parentsFilter, scoreMode), path); }
public ESToParentBlockJoinQuery(Query childQuery, BitSetProducer parentsFilter, ScoreMode scoreMode, String path) { this(new ToParentBlockJoinQuery(childQuery, parentsFilter, scoreMode), path); }
@Override public Query rewrite(IndexReader reader) throws IOException { if (getBoost() != 1f) { return super.rewrite(reader); } final Query childRewrite = childQuery.rewrite(reader); if (childRewrite != childQuery) { return new ToParentBlockJoinQuery(origChildQuery, childRewrite, parentsFilter, scoreMode); } else { return super.rewrite(reader); } }
@Override protected Query doBuild(LuceneSearchPredicateContext context) { LuceneSearchPredicateContext childContext = new LuceneSearchPredicateContext( absoluteFieldPath ); BooleanQuery.Builder childQueryBuilder = new BooleanQuery.Builder(); childQueryBuilder.add( LuceneQueries.childDocumentQuery(), Occur.FILTER ); childQueryBuilder.add( LuceneQueries.nestedDocumentPathQuery( absoluteFieldPath ), Occur.FILTER ); childQueryBuilder.add( nestedBuilder.build( childContext ), Occur.MUST ); Query parentQuery; if ( context.getNestedPath() == null ) { parentQuery = LuceneQueries.mainDocumentQuery(); } else { parentQuery = LuceneQueries.nestedDocumentPathQuery( context.getNestedPath() ); } // TODO at some point we should have a parameter for the score mode return new ToParentBlockJoinQuery( childQueryBuilder.build(), new QueryBitSetProducer( parentQuery ), ScoreMode.Avg ); } }
@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; } }