package won.matcher.solr.query; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; import org.apache.solr.common.params.SolrParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import won.matcher.solr.config.SolrMatcherConfig; import won.matcher.solr.hints.HintBuilder; import javax.annotation.PostConstruct; import java.io.IOException; /** * Created by hfriedrich on 12.08.2016. */ @Component public class DefaultMatcherQueryExecuter implements SolrMatcherQueryExecutor { private final Logger log = LoggerFactory.getLogger(getClass()); @Autowired SolrMatcherConfig config; SolrClient solrClient; @PostConstruct private void init() { solrClient = new HttpSolrClient.Builder(config.getSolrEndpointUri(false)).build(); } @Override public SolrDocumentList executeNeedQuery(String queryString, SolrParams params, String... filterQueries) throws IOException, SolrServerException { SolrQuery query = new SolrQuery(); log.debug("use query: {} with filters {}", queryString, filterQueries); query.setQuery(queryString); query.setFields("id", "score", HintBuilder.WON_NODE_SOLR_FIELD, HintBuilder.HAS_FLAG_SOLR_FIELD); query.setRows(config.getMaxHints()); if (filterQueries != null) { query.setFilterQueries(filterQueries); } if (params != null) { query.add(params); } try { QueryResponse response = solrClient.query(query); return response.getResults(); } catch (SolrException e) { log.warn("Exception {} thrown for query: {}", e, queryString); } return null; } }