SolrJ没有设置请求处理程序

时间:2016-09-20 14:30:37

标签: solr solrj solrcloud

我有一个SolrCloud集合,其中设置了多个请求处理程序,我想访问一个名为/all的非默认请求处理程序,该处理程序在solrconfig.xml中定义。当我从浏览器中搜索时,此处理程序正常工作:

所有处理程序:

然而,当我使用SolrQuery.setRequestHandler("all")从SolrJ搜索时,我得到0结果。 SolrJ只是将qt=/all放入查询中,因此这些是同一查询的浏览器结果(SolrJ得到同样的东西):

使用qt = / all选择:

我们所有其他处理程序都观察到相同的行为。如果没有定义处理程序,Solr会抛出一个不同的错误,如果有一个前导'/'或默认选择是否没有前导'/'所以我们知道这不是问题。

所以我的问题是,我怎样才能在SolrJ中使用它? Select具有solrconfig.xml中的默认设置,它需要保留默认处理程序。搜索时,如果存在重复的ID或未存储id字段,则似乎会发生错误。但如果是这种情况,那么搜索都不应该起作用,所以我认为其他一些必须在这里进行。

2 个答案:

答案 0 :(得分:0)

" setRequestHandler"中的可见效果确实如此。方法是只设置qt参数。但这并不是SolrJ故事的结局。

当处理SolrJ请求时,如果qt参数包含以正斜杠开头的字符串,SolrJ将更改" / select"在将参数发送到Solr之前,在该参数中包含的值的URL路径中。它也会将qt参数原样发送给Solr,但参数本身通常并不重要。

如果你在/ select处理程序上向solr发送一个实际请求,qt设置为" / all",Solr应该忽略qt参数 - 除非你在requestDispatcher部分中将handleSelect设置为true。 solrconfig.xml中。建议不要这样做 - 因为这意味着您可以通过/ select处理程序更改索引,只需将qt设置为" / update"。

https://cwiki.apache.org/confluence/display/solr/RequestDispatcher+in+SolrConfig#RequestDispatcherinSolrConfig-handleSelectElement

新的Solr中也存在一个错误,其中使用qt与handleSelect =" true"不能正常工作。我不确定这是否真的被认为是一个错误。它肯定不会被推荐配置。

收到该异常时,solrconfig.xml中的handleSelect设置是什么?

答案 1 :(得分:0)

看起来这个问题刚好解决了。没有进行任何更改,但现在一切正常。我们认为可能会有一些索引在后台进行,或者可能是Solr本身发生了一些事情。我们可能永远都不会知道,但我不再能够重现这个问题,所以我想这样可行。

感谢所有试图提供帮助的人。