如何从solrj SolrException中获取更多错误消息
当我使用solrj向Solr发送查询时,有时会抛出SolrException。当我深入研究异常时,它只会说“坏请求”,并给出HTTP返回码(400) 当我获取请求URL并将其放在浏览器中时,我能够看到更丰富的错误消息。浏览器将显示一条错误消息,指出其中一个字段名称无效 我希望能够在我的日志文件中捕获这一点。我能够通过将所有参数复制到ApacheHTTP客户端POST请求(我使用POST而不是GET,因为GET使URL太长)并重新执行请求来捕获这一点,但这是低效的。有没有办法直接从SolrException中获取错误消息 以下是我正在做的:如何从solrj SolrException中获取更多错误消息,solr,solrj,Solr,Solrj,当我使用solrj向Solr发送查询时,有时会抛出SolrException。当我深入研究异常时,它只会说“坏请求”,并给出HTTP返回码(400) 当我获取请求URL并将其放在浏览器中时,我能够看到更丰富的错误消息。浏览器将显示一条错误消息,指出其中一个字段名称无效 我希望能够在我的日志文件中捕获这一点。我能够通过将所有参数复制到ApacheHTTP客户端POST请求(我使用POST而不是GET,因为GET使URL太长)并重新执行请求来捕获这一点,但这是低效的。有没有办法直接从SolrExce
catch (SolrServerException e) {
if(e.getRootCause() instanceof SolrException) {
SolrException ee = (SolrException) e.getRootCause();
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(SOLR_URL);
// copy params over
Iterator<String> iter = request.getParams().getParameterNamesIterator();
while(iter.hasNext()) {
String p = iter.next();
method.setParameter(p, request.getParams().get(p));
}
int statusCode;
try {
// re execute and display the error message
statusCode = client.executeMethod(method);
logger.error(method.getResponseBodyAsString());
} catch (Exception e1) {
// TODO Auto-generated catch block
}
}
catch(SolrServer异常){
if(例如,getRootCause()instanceof SolrException){
SolrException ee=(SolrException)e.getRootCause();
HttpClient=新的HttpClient();
PostMethod方法=新的PostMethod(SOLR_URL);
//复制参数
迭代器iter=request.getParams().getParameterNamesIterator();
while(iter.hasNext()){
字符串p=iter.next();
setParameter(p,request.getParams().get(p));
}
int状态码;
试一试{
//重新执行并显示错误消息
statusCode=client.executeMethod(方法);
logger.error(方法.getResponseBodyAsString());
}捕获(异常e1){
//TODO自动生成的捕捉块
}
}
这些消息无法通过SolrJ获得。您可以在solr的日志文件中看到它们,但无法在您的客户端中捕获它们,因为solr只向客户端返回400错误状态和一般消息:(从技术上讲,SolrJ可能还没有实现它,但这是可能的,我已经在SolrNet中捕获了整个错误消息。这可能是javabin编码的一个限制。