【问题标题】:Session id to the Solr urlSolr url 的会话 ID
【发布时间】:2011-12-13 06:15:32
【问题描述】:

我正在尝试向运行 Solr 的服务器发送查询,如下所示:

String solrServerUrl = //SomeBaseUrl
CommonsHttpSolrServer searchServer = new CommonsHttpSolrServer("http://"+solrServerUrl);
QueryResponse result = searchServer.query(query,SolrRequest.METHOD.POST);

在我发送到 Solr 服务器的查询请求中,我将 sessionId 字符串附加如下(用于记录目的):

String solrServerUrl = SomeBaseUrl.concat("?sessionId");

当我运行服务器时,我得到以下异常:

嵌套异常是 java.lang.RuntimeException: Invalid base url for solrj。基本 URL 不得包含参数

有人能指出我如何将唯一的会话 ID 转发到 Solr 服务器,以便目标 Solr 服务器中设置的 tomcat 阀门选择会话 ID 以进行日志记录吗?

谢谢

【问题讨论】:

  • 不是一个答案,而是一个观察。您正在向 POST 上的 URL 添加参数,而不是 GET。 Valve 会在 POST 上查看 URL 参数吗?
  • @rfreak - 我的印象是 Tomcat 阀门应该能够处理任何类型的请求。 GET/POST 应该不是问题。不过我可能错了。

标签: java solr solrj jsessionid


【解决方案1】:

我认为实际的CommonsHttpSolrServer 代码不可能采用这种方式,无论您使用的是 POST 还是 GET(即使 rfeak 的评论看起来不错)。

CommonsHttpSolrServer 主构造函数中有这样的条件:

if( _baseURL.indexOf( '?' ) >=0 ) {
    throw new RuntimeException( "Invalid base url for solrj.  The base URL must not contain parameters: "+_baseURL );
}

我会尝试使用SolrQuery#setParam 方法。通过这种方式,您可能能够添加额外的请求参数,这些参数应该被 Solr 请求处理程序忽略。

【讨论】:

  • 我意识到在 CommonsHttpSolrServer 的构造函数中传递参数不是可行的方法。是否有一种方法可以制作请求以便将 sessionId 嵌入到 url 中?
  • 我查看了 SolrServerCommonsHttpSolrServer 类,但我还没有找到实现您想要的快速方法。也许你可以尝试使用 SolrQuery#setParam 但我不确定。
  • 谢谢。我将尝试将参数设置为查询,看看是否有效。
  • 在查询中设置参数似乎已将会话传递给 Solr 服务器。我想知道从长远来看这是否会对搜索结果产生影响?
  • 很好用!我用我们所有的讨论更新了我的答案。我猜 Solr 请求处理程序应该忽略附加参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2014-01-29
  • 1970-01-01
  • 2011-05-19
  • 2011-05-04
  • 2018-08-29
相关资源
最近更新 更多