/**
*
*/
package org.ariadne_eu.metadata.resultsformat;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import net.sourceforge.minor.lucene.core.searcher.IndexSearchDelegate;
import org.apache.log4j.Logger;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TopDocs;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.params.FacetParams;
import org.ariadne.config.PropertiesManager;
import org.ariadne_eu.metadata.query.QueryMetadataLuceneImpl;
import org.ariadne_eu.utils.config.RepositoryConstants;
import org.ariadne_eu.utils.solr.SolrServerManagement;
/**
* @author gonzalo
*
*/
public class ResultDelegateSolrImpl implements IndexSearchDelegate {
private static Logger log = Logger.getLogger(QueryMetadataLuceneImpl.class);
private int start;
private int max;
private String lQuery;
private static Vector facetFields;
static {
try {
facetFields = new Vector();
int i = 1;
Collection solrs = PropertiesManager.getInstance().getPropertyStartingWith(RepositoryConstants.getInstance().SR_SOLR_FACETFIELD + ".").values();
for (Object object : solrs) {
facetFields.add((String) object);
}
if (!(facetFields.size() > 0)) {
log.error("initialize:property \"" + RepositoryConstants.getInstance().SR_SOLR_FACETFIELD + ".n\" not defined");
}
} catch (Throwable t) {
log.error("initialize: ", t);
}
}
public ResultDelegateSolrImpl(int start, int max, String lQuery) {
this.start = start;
this.max = max;
this.lQuery = lQuery;
}
public String result(TopDocs topDocs, IndexSearcher searcher) throws Exception {
SolrServerManagement serverMgt = SolrServerManagement.getInstance();
StringBuilder sBuild = new StringBuilder();
sBuild.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n");
SolrQuery solrQuery = new SolrQuery().setQuery(lQuery).setFacet(true).setFacetLimit(-1).setFacetMinCount(0).setFacetSort(FacetParams.FACET_SORT_COUNT).setParam("rows", Integer.toString(max)).setParam("start", Integer.toString(start));
for (Iterator iterator = facetFields.iterator(); iterator.hasNext();) {
String facetField = (String) iterator.next();
solrQuery.addFacetField(facetField);
}
QueryResponse rsp = serverMgt.getServer().query(solrQuery);
List facetsFields = rsp.getFacetFields();
sBuild.append("<facets>\n");
if (facetsFields.size() > 0) {
List facetValues;
FacetField facetField;
FacetField.Count innerFacetField;
for (Iterator facetIterator = facetsFields.iterator(); facetIterator.hasNext();) {
facetField = (FacetField) facetIterator.next();
sBuild.append("<facet_field name=\"" + facetField.getName() + "\">\n");
facetValues = facetField.getValues();
if (facetValues != null) {
for (Iterator ifacetIterator = facetValues.iterator(); ifacetIterator.hasNext();) {
innerFacetField = (FacetField.Count) ifacetIterator.next();
sBuild.append("<facet_count name=\"" + innerFacetField.getName() + "\">" + innerFacetField.getCount() + "</facet_count>\n");
}
}
sBuild.append("</facet_field>\n");
}
}
sBuild.append("</facets>\n");
sBuild.append("</response>");
return sBuild.toString();
}
}