Можно ли выполнить свертывание/группировку полей с помощью Solrnet 0.3.1 и Sorl 3.3?

StackOverflow https://stackoverflow.com/questions/8305187

  •  25-10-2019
  •  | 
  •  

Вопрос

Как упоминалось в вопросе, я пытаюсь использовать функцию группировки результатов Solr, чтобы (сюрприз) сгруппировать результаты поиска.Насколько я понимаю, Solrnet 0.3.1 поддерживает свертывание полей, но не работает для Solr, поскольку Solr заменил свертывание полей группировкой результатов в версии 3.3.

Я видел, что Solrnet 0.4.0 альфа поддерживает группировку, однако я не думаю, что смогу использовать это для моего текущего проекта, поскольку это альфа-версия, и мне будет сложно обосновать это клиенту.Если только кто-то не сможет привести достаточно убедительные аргументы против того, что альфа будет «небезопасной».

Я также попытался добавить параметры группы, установив 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 после возврата запроса.Если это мой единственный вариант, я не против его использовать.

Спасибо за помощь.

Это было полезно?

Решение

Суммируя:нет, с этой комбинацией версий Solr/SolrNet никак нельзя.В SolrNet 0.3.1 реализовано свертывание полей для ночной сборки Solr, когда оно только начало реализовываться (тогда это еще не называлось «группировкой»).После этого в Solr было полностью переработано свертывание полей (теперь оно называется «группировкой результатов»), а реализация SolrNet 0.3.1 осталась устаревшей.

Поддержка группировки результатов была добавлена ​​вскоре после этого и выпущена в версии 0.4.0a1.

Я рекомендую использовать 0.4.0a1.Это вовсе не «небезопасно», как «нестабильно»:

Выполнение группировки на стороне клиента (т.LINQ) на самом деле не вариант, так как вам нужно получить все документы, чтобы сделать это правильно.Это похоже на разбивку на страницы + сортировку на стороне клиента с помощью реляционной базы данных.

Вы также можете перенести группировку результатов в версию 0.3.1, но, ИМХО, это действительно бессмысленно и пустая трата времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top