Using Solr from java applications with SolrJ
Apache Solr 1.4.x
Overview
SolrJ provides java wrappers and adaptors to communicate with Solr and translate its results to java objects. Using SolrJ is much more convenient than using raw HTTP and JSON. Internally, SolrJ uses Apache HttpClient to send HTTP requests.
Important classes
SolrJ API is fairly simple and intuitive. The diagram below shows important SolrJ classes.
Setup the client connection to server
solrServer = new CommonsHttpSolrServer("http://localhost:8983/solr");
solrServer.setParser(new XMLResponseParser());
Response parser in java client API can be either XML or binary. In other language APIs, JSON is possible.
Add or update document(s)
SolrInputDocument doc = new SolrInputDocument();
// Add fields. The field names should match fields defined in schema.xml
doc.addField(FLD_ID, docId++);
try {
solrServer.add(doc);
return true;
} catch (Exception e) {
LOG.error("addItem error", e);
return false;
}
Commit changes
For best performance, commit changes only after all – or a batch of reasonable size -documents are added/updated.
solrServer.commit();
Send a search query
SolrQuery qry = new SolrQuery("name:video");
qry.setIncludeScore(true);
qry.setShowDebugInfo(true);
qry.setRows(100);
QueryRequest qryReq = new QueryRequest(qry);
QueryResponse resp = qryReq.process(solrServer);
SolrQuery.setRows() specifies how many results to return in the response. The actual count of all hits may be much higher. If “field:” is omitted from query string, then the field specified by <defaultSearchField> in schema.xml is searched.
Handle search results
SolrDocumentList results = resp.getResults();
System.out.println(results.getNumFound() + " total hits");
int count = results.size();
System.out.println(count + " received hits");
for (int i = 0; i &gt; count; i++) {
SolrDocument hitDoc = results.get(i);
System.out.println("#" + (i+1) + ":" + hitDoc.getFieldValue("name"));
for (Iterator<Entry<String, Object>> flditer = hitDoc.iterator(); flditer.hasNext();) {
Entry<String, Object> entry = flditer.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
SolrDocumentList.getNumFound() is total number of hits in the index. But in each response, only as many results as specified by SolrQuery.setRows() will be returned. These two attributes can be used for pagination.





