2010-05-07 5 views
5

Ich verwende Solr auf meinem Windows-Rechner mit Jetty. Ich habe die Spatial Solr Plugin heruntergeladen, die ich endlich zum Laufen gebracht habe. Ich verwende auch Solrnet, um gegen Solr von meinem asp.net mvc Projekt abzufragen.Hinzufügen von Spatial Solr zu einer Solrnet-Abfrage

Nun scheint das Hinzufügen von Daten in meinen Index zu funktionieren und die SpatialTierUpdateProcessorFactory funktioniert auch.

Das Problem ist:

Wie kann ich die räumliche Abfrage zu meiner normalen Abfrage mit der Solrnet Bibliothek hinzufügen. Ich habe versucht, es mit dem Parameter "ExtraParams" hinzuzufügen, aber das hat nicht sehr gut funktioniert.

Hier ist ein Beispiel von mir versucht, die räumliche Abfrage mit einer Datenbereichsabfrage zu kombinieren. Der Datumsbereich Abfrage funktioniert, ohne die räumliche Abfrage mit ihm verbunden:

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

, die gegen Solr in der folgenden Abfrage-Ergebnisse:

(({!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]) 

und die Fehlermeldung, die ich zurück bekommen, ist:

Der Remote-Server hat einen Fehler zurückgegeben: (400) Ungültige Anforderung. Jetzt

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

, die Sache ist, wenn ich die Solr Web Admin-Seite und führen Sie die folgende Abfrage gegen sie verwenden, funktioniert alles einwandfrei.

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

Was ist der beste/richtige Weg, um die räumliche Funktion mit SolrNet aufzurufen. Ist der beste Weg, um das Bit der Abfrage manuell in die Abfragezeichenfolge hinzuzufügen, und wie?

Antwort

5

die LocalParams Klasse verwenden LocalParams in Solr darzustellen:

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")); 

Dies als von SolrNet verfügbar ist 0.3.0b1.

+0

Prost! Genau das, was ich brauchte. Ich habe es funktioniert, indem Sie manuell mit der Abfragezeichenfolge herumspielen, aber Ihre Lösung ist der bessere/sauberere Weg zu gehen. Danke vielmals! – Flo