2010-05-07 11 views
5

Estoy ejecutando Solr en mi máquina de Windows utilizando embarcadero. He descargado el Spatial Solr Plugin que finalmente logré poner en funcionamiento. También estoy usando Solrnet para consultar contra Solr de mi proyecto asp.net mvc.Cómo agregar Spatial Solr a una consulta de Solrnet

Ahora, agregar datos en mi índice parece funcionar bien y SpatialTierUpdateProcessorFactory también funciona.

El problema es:

¿Cómo agrego la consulta espacial a mi consulta normal usando la biblioteca Solrnet. He intentado agregarlo usando el parámetro "ExtraParams", pero eso no funcionó muy bien.

Aquí hay un ejemplo de mi intento de combinar la consulta espacial con una consulta de rango de datos. La consulta rango de fechas funciona bien sin la consulta espacial que se le atribuye:

new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery); 

que se traduce en la siguiente consulta en Solr:

(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z]) 

Y el mensaje de error que se obtiene es:

El servidor remoto devolvió un error: (400) Solicitud incorrecta.

SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars 
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit= 
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0 
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2 
4. 
Was expecting: 
    "}" ... 

Ahora, la cosa es que si se utiliza la página Web Admin Solr y ejecutar la siguiente consulta en contra de ella, todo funciona bien.

{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London 

Cuál es la forma mejor/correcta de llamar a la función espacial utilizando SolrNet. ¿Es la mejor manera de agregar de alguna manera ese bit de la consulta manualmente a la cadena de consulta y es así cómo?

Respuesta

5

utilizar la clase para representar LocalParamsLocalParams in Solr:

solr.Query(new LocalParams { 
    {"type", "spatial"}, 
    {"lat", "-51.5224"}, 
    {"long", "-2.6257"}, 
    {"radius", "10000"}, 
    {"unit", "km"}, 
    {"calc", "arc"}, 
    {"threadCount", "2"}, 
} + Query.Field("text").Is("London")); 

Este servicio está disponible a partir del SolrNet 0.3.0b1.

+0

¡Salud! Exactamente lo que necesitaba. Lo conseguí trabajando jugando con la cadena de consulta manualmente, pero tu solución es la mejor/más limpia forma de hacerlo. ¡Muchas gracias! – Flo

Cuestiones relacionadas