使用setQueryType通过SolrJ访问核心的默认处理程序

时间:2013-06-10 14:41:40

标签: solr solrj

我在实例上有几个Solr核心,每个核心都有一个StandardRequestHandler和一些自定义请求处理程序,例如:

<requestDispatcher handleSelect="true" >
  <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
</requestDispatcher>
...
<requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
...
<requestHandler name="/custom" class="com.example.our.package.CustomHandler" />
...

我希望能够通过SolrJ访问它们,但是,我只能通过设置baseUrl对象的HttpSolrServer属性来完成此操作。然而,这是不可取的,因为 HttpSolrServer实例在多个线程之间共享,因此会出现竞争条件。另一个原因是团队的共识在于 HttpSolrServer Singleton - 为了简单起见的范围。

我尝试的是这样的:

HttpSolrServer server = new HttpSolrServer("http://URL_OF_SOLR:PORT/solr/");
SolrQuery query = new SolrQuery();
query.setQueryType("/core/custom");

这适用于自定义处理程序,但在调用/select时失败,代码为400,至少对于我尝试过的网址/core/core/select/core//core/standard)等。

所以我的问题是:如何定义此查询以正确引用核心的默认请求处理程序,仅使用queryType或其他SolrParams值?

1 个答案:

答案 0 :(得分:3)

您可以使用Solr中的qt参数指定特定的请求处理程序,甚至是默认的/select处理程序。有关其工作原理的详细信息,请参阅CoreQueryParameters。 SolrJ通过在setRequestHandler类上使用SolrQuery方法来支持这一点。

一些示例,假设您的Solr实例位于http://localhost:8983/solr,并且您有两个名为core0core1的内核。

  • http://localhost:8983/solr/core0/select?q=*:*默认使用/select
  • http://localhost:8983/sole/core1/select?q=*:*&qt=terms这使用了条款requestHandler

最后,核心名称不应包含在qt参数b / c中,该参数旨在支持在核心中选择命名的requestHandler。 Solr实例的Url应该具有核心名称,因为每个核心都是它自己的Solr实例,因此应该像IMO一样对待它。来自SolrCore维基页面:

  

多个内核允许您拥有一个具有单独配置和索引的Solr实例,并为不同的应用程序提供自己的配置和架构,但仍然具有统一管理的便利性。

因此,定义多个HttpSolrServer实例。

 new HttpSolrServer(http://localhost:8983/solr/core0)
 new HttpSolrServer(http://localhost:8983/solr/core1)