【发布时间】:2012-11-15 08:18:49
【问题描述】:
我正在使用 solrnet 我创建了一个新的处理程序,并希望将标准查询处理程序“select”更改为“new”,而不使用任何额外的参数,如“qt”或 defType。
目前 "http://localhost:8080/solr/select?q=:"
想要 "http://localhost:8080/solr/new?q=:"
请告诉我这是否可能?
【问题讨论】:
标签: solrnet
我正在使用 solrnet 我创建了一个新的处理程序,并希望将标准查询处理程序“select”更改为“new”,而不使用任何额外的参数,如“qt”或 defType。
目前 "http://localhost:8080/solr/select?q=:"
想要 "http://localhost:8080/solr/new?q=:"
请告诉我这是否可能?
【问题讨论】:
标签: solrnet
SolrNet Google Groups 中的 Changing Handler Endpoint in SolrQueryExecutor 帖子指出,为了做到这一点,您需要按照所述修改 SolrQueryExecutor:
问题:在我们的 Solr 实例上,我们已将搜索端点从“/ 选择”到“/搜索”。我在 SolrQueryExecuter 中看到有一个 仅返回“/select”的 DefaultHandler 的 Handler 属性。有没有办法改变它以使用我的端点?
答案: 没错,您需要在 SolrQueryExecuter 中更改该属性。 你如何做到这一点取决于你的 IoC 容器。例如,使用内置容器,您将 Remove() IsolrQueryExecuter 并添加您自己的具有更改的处理程序属性。 这是很少见的事情,通常我只是设置不同的请求处理程序,而不是作为端点,而是作为常规名称,然后您可以使用 qt 参数来选择一个。
【讨论】:
如果您只想调用不同的请求处理程序,您可以获取 IsolrQueryExecuter 的实例并相应地设置处理程序。无需用具体的装饰器替换内置的 SolrQueryExecuter。
Startup.Init<T>(new SolrConnection("http://localhost:8080/solr")),
var executor = ServiceLocator.Current.GetInstance<ISolrQueryExecuter<T>>() as SolrQueryExecuter<T>;
executor.Handler = "/new";
顺便说一句,您的网址似乎缺少集合的名称。
【讨论】:
使用最新版本的 SolrNet(我在 .net 4.6 中使用过)。 在 QueryOptions 中定义一个新的 RequestHandlerParameters,如下所示:
using CommonServiceLocator;
using SolrNet;
using SolrNet.Commands.Parameters;
Startup.Init<MwDoc>("http://localhost:8983/solr/mycore");
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<MyClass>>();
QueryOptions options = new QueryOptions()
{
RequestHandler = new RequestHandlerParameters("/new"),
// define your other Options here
};
solr.Query("keyword to search", options);
【讨论】: