如问题所述,我正在尝试利用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进行分组是有点'肮脏'。如果这是我唯一的选择,我不介意使用它。
感谢您的帮助。
答案 0 :(得分:3)
简而言之:不,Solr / SolrNet版本的组合是没有办法的。 SolrNet 0.3.1实现了Solr的每晚构建的字段崩溃,当它刚刚开始实现字段折叠时(那时它不被称为“分组”)。之后,Solr(现在称为“结果分组”)对现场崩溃进行了彻底改造,SolrNet 0.3.1实施过时了。
在此之后不久添加了对结果分组的支持,并以0.4.0a1发布。
我建议使用0.4.0a1。它根本不像“不稳定”那样“不安全”:
分组客户端(即LINQ)实际上不是一个选项,因为您必须正确地获取所有文档。这就像想要使用关系数据库进行分页+排序客户端一样。
您也可以将结果分组反向移植到0.3.1,但恕我直言是没有意义的,浪费时间。