The ping command gives me a 500 status if the core exists, or a 404 if
it doesn't. For example, when I hit
http://doom:8983/solr/content_item_representations_20081201/admin/ping
I see
HTTP ERROR: 500
INTERNAL_SERVER_ERROR
RequestURI=/solr/admin/ping
Powered by Jetty://
(Obviously I'm using Jetty. Moving to Tomcat is on our list.)
I could depend on this behavior, but that seems ugly, so I decided to
try a "probe query" instead.
I am using the Solrj client library. Unfortunately, for core non-
existence or any other problem, Solrj uses an unhelpful catch-all
exception:
/** Exception to catch all types of communication / parsing
issues associated with talking to SOLR
*
* @version $Id: SolrServerException.java 555343 2007-07-11
17:46:25Z hossman $
* @since solr 1.3
*/
public class SolrServerException extends Exception {
...
}
So I have wound up, thus far, with the following code:
private boolean solrCoreExists(String url)
throws SolrException, MalformedURLException,
SolrServerException
{
try {
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("xyzzy=plugh");
new CommonsHttpSolrServer(url).query(solrQuery);
return true;
} catch (SolrServerException e) {
if (e.getCause() != null &&
e.getCause().getMessage().startsWith("Not Found")) {
return false;
} else {
throw e;
}
}
}
Hopefully there's a better solution?
Dean