/**
*
*/
package querqy.solr;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.lucene.search.Query;
import org.apache.solr.handler.component.QueryComponent;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.search.QParser;
import querqy.rewrite.ContextAwareQueryRewriter;
import querqy.rewrite.commonrules.CommonRulesRewriter;
import querqy.rewrite.commonrules.model.DecorateInstruction;
/**
* @author René Kriegler, @renekrie
*
*/
public class QuerqyQueryComponent extends QueryComponent {
/* (non-Javadoc)
* @see org.apache.solr.handler.component.SearchComponent#prepare(org.apache.solr.handler.component.ResponseBuilder)
*/
@Override
public void prepare(ResponseBuilder rb) throws IOException {
super.prepare(rb);
QParser parser = rb.getQparser();
if (parser instanceof QuerqyDismaxQParser) {
List<Query> filterQueries = ((QuerqyDismaxQParser) parser).getFilterQueries();
if ((filterQueries != null) && !filterQueries.isEmpty()) {
List<Query> filters = rb.getFilters();
if (filters == null) {
rb.setFilters(filterQueries);
} else {
filters.addAll(filterQueries);
}
}
}
}
/* (non-Javadoc)
* @see org.apache.solr.handler.component.SearchComponent#process(org.apache.solr.handler.component.ResponseBuilder)
*/
@Override
public void process(ResponseBuilder rb) throws IOException {
super.process(rb);
QParser parser = rb.getQparser();
if (parser instanceof QuerqyDismaxQParser) {
Map<String, Object> context = ((QuerqyDismaxQParser) parser).getContext();
if (context != null) {
if (rb.isDebugQuery()) {
@SuppressWarnings("unchecked")
List<String> rulesDebugInfo
= (List<String>) context.get(ContextAwareQueryRewriter.CONTEXT_KEY_DEBUG_DATA);
if (rulesDebugInfo != null) {
rb.addDebugInfo("querqy.rewrite", rulesDebugInfo);
}
}
@SuppressWarnings("unchecked")
Set<Object> decorations = (Set<Object>) context.get(DecorateInstruction.CONTEXT_KEY);
if (decorations != null) {
rb.rsp.add("querqy_decorations", decorations);
}
}
}
}
/* (non-Javadoc)
* @see org.apache.solr.handler.component.SearchComponent#getDescription()
*/
@Override
public String getDescription() {
return "Querqy search component";
}
/* (non-Javadoc)
* @see org.apache.solr.handler.component.SearchComponent#getSource()
*/
@Override
public String getSource() {
return null;
}
}