是否可以使用Solrnet 0.3.1和Sorl 3.3进行现场折叠/分组

时间:2011-11-29 02:41:39

标签: solr solrnet

如问题所述,我正在尝试利用Solr的结果分组功能(惊喜)对搜索结果进行分组。根据我的理解,Solrnet 0.3.1支持字段折叠但是Solr已经破解,因为Solr用版本3.3中的结果分组替换了字段折叠。

我已经看到Solrnet 0.4.0 alpha支持分组但是我不认为我可以将它用于我当前的项目,因为它是alpha并且我将很难向客户证明它。除非有人能列出一些相当令人信服的论据,否则alpha会“不安全”。

我还尝试通过设置ExtraParams来添加组参数:

 ExtraParams = new Dictionary<string, string>{{"group", "true"}, {"group.field", "fieldName"}}

抛出NullReferenceException:

         at SolrNet.Impl.ResponseParsers.ResultsResponseParser`1.Parse(XmlDocument xml, SolrQueryResults`1 results) in c:\prg\SolrNet\svn\SolrNet\Impl\ResponseParsers\ResultsResponseParser.cs:line 35
       at SolrNet.Impl.SolrQueryResultParser`1.Parse(String r) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrQueryResultParser.cs:line 46
       at SolrNet.Impl.SolrQueryExecuter`1.Execute(ISolrQuery q, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrQueryExecuter.cs:line 309
       at SolrNet.Impl.SolrBasicServer`1.Query(ISolrQuery query, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 83
       at SolrNet.Impl.SolrServer`1.Query(String q, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:line 78
       at RSearch.Core.SearchIndex.Search(String term, Int32 page, Int32 pageSize) in D:\Development\LESA-LARIAT\LariatMapper\Core\SearchIndex.cs:line 153
       at RSearch.Controllers.SearchController.Index(SearchInfo searchInfo) in D:\Development\LESA-LARIAT\LariatWeb\Controllers\SearchController.cs:line 16
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.
<InvokeActionMethodWithFilters>b__12()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

我猜测为什么会这样做是因为Solrnet不理解传回给它的结果的结构,所以它抛出了这个异常。

我真的希望能够做到这一点,因为我觉得使用Solrnet来利用Solr的所有功能,但在返回查询后通过LINQ进行分组是有点'肮脏'。如果这是我唯一的选择,我不介意使用它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

简而言之:不,Solr / SolrNet版本的组合是没有办法的。 SolrNet 0.3.1实现了Solr的每晚构建的字段崩溃,当它刚刚开始实现字段折叠时(那时它不被称为“分组”)。之后,Solr(现在称为“结果分组”)对现场崩溃进行了彻底改造,SolrNet 0.3.1实施过时了。

在此之后不久添加了对结果分组的支持,并以0.4.0a1发布。

我建议使用0.4.0a1。它根本不像“不稳定”那样“不安全”:

分组客户端(即LINQ)实际上不是一个选项,因为您必须正确地获取所有文档。这就像想要使用关系数据库进行分页+排序客户端一样。

您也可以将结果分组反向移植到0.3.1,但恕我直言是没有意义的,浪费时间。