Introduction
SolrJ is a Java client to access solr. SolrJ offers a java interface to add, update, and query the solr index.
HttpSolrServer
I use Spring to load this properties file:
solr.host = 127.0.0.1 solr.port = 8983 solr.core = documents # defaults to 0. > 1 not recommended solr.maxretries = 1 # 5 seconds to establish TCP solr.connectiontimeout = 5000 # socket read timeout solr.socketreadtimeout = 50000 # max connections per host solr.maxconnectionsperhost = 250 # max total connections solr.maxtotalconnections = 100 # defaults to false solr.followredirects = false # defaults to false # Server side must support gzip or deflate for this to have any effect. solr.allowcompression = true
and to populate this method:
public static HttpSolrServer transform(String url, boolean allowcompression, Integer connectiontimeout, String core, boolean followredirects, Integer maxconnectionsperhost, Integer maxretries, Integer maxtotalconnections, Integer socketreadtimeout) throws AdapterValidationException { HttpSolrServer server = new HttpSolrServer(url); server.setMaxRetries(maxretries); server.setConnectionTimeout(connectiontimeout); /* Setting the XML response parser is only required for cross version compatibility and only when one side is 1.4.1 or earlier and the other side is 3.1 or later. */ server.setParser(new XMLResponseParser()); /* The following settings are provided here for completeness. They will not normally be required, and should only be used after consulting javadocs to know whether they are truly required. */ server.setSoTimeout(socketreadtimeout); server.setDefaultMaxConnectionsPerHost(maxconnectionsperhost); server.setMaxTotalConnections(maxtotalconnections); server.setFollowRedirects(followredirects); server.setAllowCompression(allowcompression); return server; }
By populating the method above with the values from the properties file, the system is able to work with a configured instance of the HttpSolrServer.
Query Snippets
This code will find the total records that mention the word "climate":
public static void main(String... args) throws Throwable { HttpSolrServer server = HttpSolrServerAdapter.transform(); assertNotNull(server); SolrQuery q = new SolrQuery("text:climate"); q.setRows(0); // don't actually request any data long total = server.query(q).getResults().getNumFound(); logger.info("Total Records (total = %s)", total); }
A reusable method for executing a query:
public static QueryResponse execute( String queryName, HttpSolrServer server, SolrQuery solrQuery) throws BusinessException { try { QueryResponse queryResponse = server.query(solrQuery); logger.debug("Query Statistics " + "(query-name = %s, elapsed-time = %s, query-time = %s, status = %s, request-url = %s)", queryName, queryResponse.getElapsedTime(), queryResponse.getQTime(), queryResponse.getStatus(), queryResponse.getRequestUrl()); SolrDocumentList solrDocumentList = queryResponse.getResults(); logger.debug("Total Records " + "(query-name = %s, total = %s, query = %s)", queryName, StringUtils.format(solrDocumentList.size()), solrQuery.toString()); return queryResponse; } catch (SolrServerException e) { logger.error(e); throw new BusinessException("Unable to Query Server (query-name = %s, message = %s)", e.getMessage()); } }
References
- [Apache] SolrJ Wiki
- [Apache] SolrJ Reference Guide
No comments:
Post a Comment