@@ -133,10 +133,11 @@ public Query parse() throws SyntaxError {
133133 final Integer filteredSearchThreshold = localParams .getInt (FILTERED_SEARCH_THRESHOLD );
134134
135135 // check for parent diversification logic...
136- final String parentsFilterQuery = localParams .get (PARENTS_PRE_FILTER );
136+ final String [] parentsFilterQueries = localParams .getParams (PARENTS_PRE_FILTER );
137137 final String allParentsQuery = localParams .get (CHILDREN_OF );
138138
139- boolean isDiversifyingChildrenKnnQuery = null != parentsFilterQuery || null != allParentsQuery ;
139+ boolean isDiversifyingChildrenKnnQuery =
140+ null != parentsFilterQueries || null != allParentsQuery ;
140141 if (isDiversifyingChildrenKnnQuery ) {
141142 if (null == allParentsQuery ) {
142143 throw new SolrException (
@@ -150,7 +151,7 @@ public Query parse() throws SyntaxError {
150151 final BitSetProducer allParentsBitSet =
151152 BlockJoinParentQParser .getCachedBitSetProducer (
152153 req , subQuery (allParentsQuery , null ).getQuery ());
153- final BooleanQuery acceptedParents = getParentsFilter (parentsFilterQuery );
154+ final BooleanQuery acceptedParents = getParentsFilter (parentsFilterQueries );
154155
155156 Query acceptedChildren =
156157 getChildrenFilter (getFilterQuery (), acceptedParents , allParentsBitSet );
@@ -183,14 +184,19 @@ public Query parse() throws SyntaxError {
183184 filteredSearchThreshold );
184185 }
185186
186- private BooleanQuery getParentsFilter (String parentsFilterQuery ) throws SyntaxError {
187+ private BooleanQuery getParentsFilter (String [] parentsFilterQueries ) throws SyntaxError {
187188 BooleanQuery .Builder acceptedParentsBuilder = new BooleanQuery .Builder ();
188- if (parentsFilterQuery != null ) {
189- final Query parentsFilter = subQuery (parentsFilterQuery , null ).getQuery ();
190- acceptedParentsBuilder .add (parentsFilter , BooleanClause .Occur .FILTER );
189+ if (parentsFilterQueries != null ) {
190+ for (String parentsFilterQuery : parentsFilterQueries ) {
191+ final QParser parser = subQuery (parentsFilterQuery , null );
192+ parser .setIsFilter (true );
193+ final Query parentsFilter = parser .getQuery ();
194+ if (parentsFilter != null ) {
195+ acceptedParentsBuilder .add (parentsFilter , BooleanClause .Occur .FILTER );
196+ }
197+ }
191198 }
192- BooleanQuery acceptedParents = acceptedParentsBuilder .build ();
193- return acceptedParents ;
199+ return acceptedParentsBuilder .build ();
194200 }
195201
196202 private Query getChildrenFilter (
0 commit comments