import java.net.MalformedURLException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; //import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; //import org.apache.solr.client.solrj.impl.XMLResponseParser; import org.apache.solr.client.solrj.response.FacetField; import org.apache.solr.client.solrj.response.FacetField.Count; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.util.NamedList; import org.apache.solr.servlet.SolrRequestParsers; import java.io.File; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.core.CoreContainer; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import org.xml.sax.SAXException; import java.util.Collection; /** * A simple main to illustrate how to execute a request using SolrJ * */ public class QueryTest { //private static final String myServer = "http://localhost:8080/constellio/app"; private static final String myCollection = "localsite-lucene-jdbm-demo-didx"; // Can be set to 'on', 'off' or 'constellio' to include Constellio's facets private static final String facet_field = "DS"; // q=... private static final String query = "TX:snails"; private static final int start = 0; private static final int nbDocuments = 11; public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, SolrServerException { String solr_home_str = "C:\\cygwin\\home\\davidb\\research\\code\\greenstone3-svn-full\\ext\\solr"; System.setProperty("solr.solr.home", solr_home_str); File solr_home = new File(solr_home_str); File solr_xml = new File( solr_home, "solr.xml" ); CoreContainer cores = new CoreContainer(solr_home_str,solr_xml); /* try { cores.load(solr_home_str,solr_xml); } catch (Exception e) { e.printStackTrace(); } */ Collection core_names = cores.getCoreNames(); for (String name : core_names) { System.err.println("(**** core name: " + name); } EmbeddedSolrServer server = new EmbeddedSolrServer(cores,myCollection); // Prepare the SolrServer. Right now, the default SolrJ's ResponseParser // isn't supported by Constellio. //CommonsHttpSolrServer server = new CommonsHttpSolrServer(myServer); //server.setParser(new XMLResponseParser()); // Do the same query three times using three different method System.out.println("====== 1st way to execute a query ======"); print(doFirstQuery(server)); System.out.println("====== 2nd way to execute a query ======"); print(doSecondQuery(server)); System.out.println("====== 3rd way to execute query ======"); print(doThirdQuery(server)); /* System.out.println("======= Using SpellChecker ======"); print(spellCheck(server, "farmng snals")); */ cores.shutdown(); } /** * Do the query using a StringBuffer */ public static QueryResponse doFirstQuery(SolrServer server) throws SolrServerException { StringBuffer request = new StringBuffer(); request.append("collectionName=" + myCollection); // request.append("&username=" + "admin"); // request.append("&password=" + "password"); request.append("&facet=" + true); request.append("&facet.field=" + facet_field); request.append("&q=" + query); request.append("&start=" + start); request.append("&rows=" + nbDocuments); SolrParams solrParams = SolrRequestParsers.parseQueryString(request .toString()); return server.query(solrParams); } /** * Do the query using a ModifiableSolrParams */ public static QueryResponse doSecondQuery(SolrServer server) throws SolrServerException { ModifiableSolrParams solrParams = new ModifiableSolrParams(); solrParams.set("collectionName", myCollection); // solrParams.set("username", "admin"); // solrParams.set("password", "password"); solrParams.set("facet", "true"); solrParams.set("facet.field", facet_field); solrParams.set("q", query); solrParams.set("start", start); solrParams.set("rows", nbDocuments); return server.query(solrParams); } /** * Do the query using a SolrQuery */ public static QueryResponse doThirdQuery(SolrServer server) throws SolrServerException { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(query); solrQuery.set("collectionName", myCollection); // solrQuery.set("username", "admin"); // solrQuery.set("password", "password"); solrQuery.set("facet", "true"); solrQuery.set("facet.field", facet_field); solrQuery.setStart(start); solrQuery.setRows(nbDocuments); return server.query(solrQuery); } /** * Do the query using a SolrQuery */ public static QueryResponse spellCheck(SolrServer server, String badQuery) throws SolrServerException { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(badQuery); solrQuery.set("collectionName", myCollection); // qt=spellcheck || qt=spellchecker solrQuery.setQueryType("spellcheck"); return server.query(solrQuery); } /** * Print documents and facets * * @param response */ @SuppressWarnings("unchecked") public static void print(QueryResponse response) { SolrDocumentList docs = response.getResults(); if (docs != null) { System.out.println(docs.getNumFound() + " documents found, " + docs.size() + " returned : "); for (int i = 0; i < docs.size(); i++) { SolrDocument doc = docs.get(i); System.out.println("\t" + doc.toString()); } } List fieldFacets = response.getFacetFields(); if (fieldFacets != null && fieldFacets.isEmpty()) { System.out.println("\nField Facets : "); for (FacetField fieldFacet : fieldFacets) { System.out.print("\t" + fieldFacet.getName() + " :\t"); if (fieldFacet.getValueCount() > 0) { for (Count count : fieldFacet.getValues()) { System.out.print(count.getName() + "[" + count.getCount() + "]\t"); } } System.out.println("™"); } } Map queryFacets = response.getFacetQuery(); if (queryFacets != null && !queryFacets.isEmpty()) { System.out.println("™\nQuery facets : "); for (String queryFacet : queryFacets.keySet()) { System.out.println("\t" + queryFacet + "\t[" + queryFacets.get(queryFacet) + "]"); } System.out.println("™"); } NamedList> spellCheckResponse = (NamedList>) response .getResponse().get("spellcheck"); if (spellCheckResponse != null) { Iterator>> wordsIterator = spellCheckResponse .iterator(); while (wordsIterator.hasNext()) { Entry> entry = wordsIterator.next(); String word = entry.getKey(); NamedList spellCheckWordResponse = entry.getValue(); boolean correct = spellCheckWordResponse.get("frequency") .equals(1); System.out.println("Word: " + word + ",\tCorrect?: " + correct); NamedList suggestions = (NamedList) spellCheckWordResponse .get("suggestions"); if (suggestions != null && suggestions.size() > 0) { System.out.println("Suggestions : "); Iterator> suggestionsIterator = suggestions .iterator(); while (suggestionsIterator.hasNext()) { System.out.println("\t" + suggestionsIterator.next().getKey()); } } System.out.println("™"); } } } }