Pregunta

Como se menciona en la pregunta, estoy tratando de utilizar la función de agrupación de resultados de Solr para agrupar (sorpresa) mis resultados de búsqueda. Por lo que entiendo, Solrnet 0.3.1 admite el colapso del campo pero está roto para Solr porque Solr reemplazó el colapso de campo con la agrupación de resultados en la versión 3.3.

He visto que Solrnet 0.4.0 Alpha admite la agrupación, sin embargo, no creo que sea posible para mí utilizar eso para mi proyecto actual, ya que es Alpha y me costaría mucho justificar al cliente. A menos que alguien pueda enumerar algunos argumentos bastante convincentes en el contrario de que un alfa sería "inseguro".

También he intentado agregar los parámetros del grupo configurando los extraparams de así decirlo:

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

Esto arroja una 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)

Supongo que por qué hace esto es Solrnet no entiende que la estructura de los resultados le devuelve esta excepción.

Realmente me gustaría poder hacer esto, ya que siento que es un poco "sucio" usar Solrnet para aprovechar todas las características de Solr, pero hacer que la agrupación se realice a través de Linq después de que se devuelve la consulta. Sin embargo, si es mi única opción, no me importa usarla.

Gracias por tu ayuda.

¿Fue útil?

Solución

En resumen: no, no hay forma con ese combo de versiones Solr/Solrnet. Solrnet 0.3.1 implementó el colapso de campo para una construcción nocturna de SOLR, cuando comenzó a implementar el colapso de campo (no se llamó 'agrupación' en ese momento). Después de eso, el colapso del campo se revisó por completo en SOLR (ahora llamado 'agrupación de resultados'), y la implementación de Solrnet 0.3.1 se dejó obsoleta.

El soporte para la agrupación de resultados se agregó poco después y se lanzó con 0.4.0a1.

Recomiendo ir con 0.4.0a1. No es 'inseguro' como en 'inestable' en absoluto:

Hacer agrupación del lado del cliente (es decir, LINQ) no es realmente una opción, ya que tiene que buscar todos Los documentos para hacerlo correctamente. Es como querer la paginación + clasificación del lado del cliente con una base de datos relacional.

También es posible que pueda la agrupación de resultados de retroceso a 0.3.1, pero en mi humilde opinión es realmente inútil y una pérdida de tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top