package com.plugtree.solradvert.fact; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.apache.lucene.search.DisjunctionMaxQuery; import org.apache.lucene.search.Query; public class DismaxParentChildRelationship extends ParentChildRelationship { private DisjunctionMaxQuery parent; private Query child; public DismaxParentChildRelationship(DisjunctionMaxQuery parent, Query child) { super(parent, child); this.parent = parent; this.child = child; } @Override public void remove() { Iterator<Query> it = parent.iterator(); while(it.hasNext()) { Query q = it.next(); if(q.equals(child)) { it.remove(); return; } } } public static class DismaxParentChildRelationshipFactory extends ParentChildRelationshipFactory { @Override public Collection<ParentChildRelationship> getRelationships(Query parent) { if(parent instanceof DisjunctionMaxQuery) { DisjunctionMaxQuery dismaxQuery = (DisjunctionMaxQuery)parent; Collection<ParentChildRelationship> relationships = new ArrayList<ParentChildRelationship>(); for(Query child: dismaxQuery) { relationships.add(new DismaxParentChildRelationship(dismaxQuery, child)); } return relationships; } return null; } } }