我有一个SolrCloud集合,其中设置了多个请求处理程序,我想访问一个名为/all
的非默认请求处理程序,该处理程序在solrconfig.xml中定义。当我从浏览器中搜索时,此处理程序正常工作:
然而,当我使用SolrQuery.setRequestHandler("all")
从SolrJ搜索时,我得到0结果。 SolrJ只是将qt=/all
放入查询中,因此这些是同一查询的浏览器结果(SolrJ得到同样的东西):
我们所有其他处理程序都观察到相同的行为。如果没有定义处理程序,Solr会抛出一个不同的错误,如果有一个前导'/'或默认选择是否没有前导'/'所以我们知道这不是问题。
所以我的问题是,我怎样才能在SolrJ中使用它? Select具有solrconfig.xml中的默认设置,它需要保留默认处理程序。搜索时,如果存在重复的ID或未存储id字段,则似乎会发生错误。但如果是这种情况,那么搜索都不应该起作用,所以我认为其他一些必须在这里进行。
答案 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"。
新的Solr中也存在一个错误,其中使用qt与handleSelect =" true"不能正常工作。我不确定这是否真的被认为是一个错误。它肯定不会被推荐配置。
收到该异常时,solrconfig.xml中的handleSelect设置是什么?
答案 1 :(得分:0)
看起来这个问题刚好解决了。没有进行任何更改,但现在一切正常。我们认为可能会有一些索引在后台进行,或者可能是Solr本身发生了一些事情。我们可能永远都不会知道,但我不再能够重现这个问题,所以我想这样可行。
感谢所有试图提供帮助的人。