2010-05-07 8 views
5

Sto eseguendo Solr sulla mia macchina Windows utilizzando il molo. Ho scaricato il Spatial Solr Plugin che finalmente sono riuscito a far funzionare. Sto anche usando Solrnet per interrogare contro Solr dal mio progetto asp.net mvc.Come aggiungere Spatial Solr a una query Solrnet

Ora, l'aggiunta di dati nel mio indice sembra funzionare correttamente e anche SpatialTierUpdateProcessorFactory funziona.

Il problema è:

Come si aggiunge la query spaziale alla mia interrogazione normale utilizzando la libreria Solrnet. Ho provato ad aggiungerlo usando il parametro "ExtraParams" ma non ha funzionato molto bene.

Ecco un esempio di me che tenta di combinare la query spaziale con una query dell'intervallo di dati. La query intervallo di date funziona bene senza la query spaziale collegato ad esso:

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

che si traduce nella seguente query contro 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]) 

E il messaggio di errore torno a dire:

Il server remoto ha restituito un errore: (400) Richiesta non valida.

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: 
    "}" ... 

Ora, la cosa è se uso la pagina Web Admin Solr ed eseguire la seguente query contro di esso, tutto funziona bene.

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

Qual è il modo migliore/corretto per chiamare la funzione spaziale utilizzando SolrNet. È il modo migliore per aggiungere in qualche modo quel bit della query manualmente alla stringa di query ed è così come?

risposta

5

utilizzare la classe LocalParams per rappresentare LocalParams 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")); 

Questo è disponibile come di SolrNet 0.3.0b1.

+0

Cheers! Esattamente quello di cui avevo bisogno. L'ho fatto lavorando con la stringa di query manualmente, ma la tua soluzione è il modo migliore/più pulito per andare. Molte grazie! – Flo

Problemi correlati