如何从 solrj SolrException 中获取更多错误消息

发布于 2024-11-19 21:59:03 字数 1316 浏览 3 评论 0原文

当我使用 solrj 向 Solr 发送查询时,有时会抛出 SolrException。当我深入研究异常时,它只是显示“错误请求”,并给出 HTTP 返回代码(400)。

当我获取请求 URL 并将其放入浏览器时,我能够看到更丰富的错误消息。浏览器显示一条错误消息,指出其中一个字段名称无效。

我希望能够在我的日志文件中捕获这一点。我能够通过将所有参数复制到 Apache HTTP 客户端 POST 请求(我使用 POST 而不是 GET,因为 GET 使 URL 太长)并重新执行请求来捕获此问题,但这效率很低。有没有办法直接从 SolrException 中获取错误消息?

这就是我正在做的:

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
                }
            }

When I send queries to Solr using solrj, I sometimes get SolrException's thrown. When I dig through the exception, it just says "Bad Request", and gives the HTTP return code (which is 400).

When I take the request URL and put it in my browser, I was able to see a richer error message. The browser displays an error message saying one of the fields names is not valid.

I would like to be able to capture this inside my log file. I was able to capture this by copying all the parameters to an Apache HTTP Client POST request (I'm using POST and not GET because GET made the URL too long) and re-executing the request, but this is inefficient. Is there a way to get error message out of SolrException directly?

Here's what I'm doing:

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
                }
            }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲性难收 2024-11-26 21:59:04

这些消息无法通过 SolrJ 获得。您可以在 solr 的日志文件中看到它们,但无法在客户端中捕获它们,因为 solr 只向客户端返回 400 错误状态和通用消息:(

These messages aren't available via SolrJ. You can see them in solr's log file, but there is no way to capture them in your client, since solr only returns the 400 error status with a generic message to the client :(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文