2011-01-15 4 views
4

Also habe ich Solr 4 implementiert und erfolgreich eingesetzt. Ich muss sagen, dass Solr 4 super ist! Trotzdem habe ich erfolgreich nach Entfernung sortiert und einen Geofilter verwendet, um die Ergebnisse auf ein bestimmtes Gebiet zu beschränken. Was ich jetzt tun möchte, ist, den Relevanz-Score um die Inverse der Entfernung zu erhöhen. Diese Seite spricht darüber aber nicht sagen, wie es zu tun (http://wiki.apache.org/solr/SpatialSearch)So erhöhe ich den Solr-Relevanz-Score durch die Umkehrung von Geodist()

ich folgendes versucht haben, aber es gibt mir eine Fehlermeldung:

http://localhost:8983/solr/select/?q={!boost b=recip(geodist(), 1, 1000, 1000)}...

Der Fehler, den ich bekommen ist:

org.apache.lucene.queryParser.ParseException: Expected identifier at pos 27 str='{!boost b=recip(geodist(), 1, 10 in ...

Jede Hilfe würde geschätzt. Vielen Dank!

+1

http://wiki.apache.org/solr/SpatialSearch#How_to_boost_closest_results –

Antwort

11

Sie müssen noch den Hauptteil der Abfrage nach der Boost-Funktion angeben:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&... 

Wenn Sie nur daran interessiert sind durch die Umkehrung des Abstandes bei der Ankurbelung Sie eine Platzhalter-Abfrage verwenden kann:

q={!boost b=recip(geodist(),1,1000,1000)}*&... 

... oder benutzen Sie die Funktion Abfrageparser:

q={!func}recip(geodist(),1,1000,1000)&... 

Sie müssen auch angeben t er lat/long Werte und räumliche Feld gegen die Abfrage entweder als Argumente der geodist Funktion:

q={!boost b=recip(geodist(50.1, -0.86, myGeoField),1,1000,1000)}foo:bar&... 

... oder als Abfrage-String-Parameter ausgeklammert:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&sfield=myGeoField&pt=50.1,-0.86 
+0

Thank you! Ja, der Teil der Frage, bei dem ich mich vertan habe, war die Angabe von lat/long und dem räumlichen Feld! Danke noch einmal! –

+1

Nur FYI, In solr 3.x müssen Sie Leerzeichen zwischen den Kommas für die Parameter entfernen – jjxtra

+0

@PsychoDad Holy Moly, das ist eine böse Gotcha. Ich habe ein Problem für mich gelöst, vielen Dank! – markdsievers

0

nur hinzufügen, dass ich bekommen bessere Ergebnisse mit ...

{!boost b=recip(geodist(),1,100,10)} 

ich weiß nicht, was dies verursacht, aber ich wünschte Solr ein wenig mehr Informationen zu den Parametern für die recip und Auftrieb gab. Current Documentation fehlt.

+0

recip() ist eine Funktion '' recip (x, m, a, b) '' der Form '' a/(m * x + b) ''. Wenn a, b den gleichen Wert haben, wird ein Wert im Bereich von 0 bis 1 zurückgegeben. Wenn a, b größer werden, gibt es weniger Varianz im zurückgegebenen Wert. –

0

Als Randnotiz hier ist ein Abstand Boost an meinem Arbeitsplatz. Es ist anders als das auf der Solr Dokumentationsseite. Diese Boost-Funktion wird die Entfernung für eine Anzahl von Kilometern gleich behandeln, bevor das Boosten beginnt. Dies ist in einigen Situationen nützlich, in denen Sie keine Relevanzänderungen für kleine Abstandsunterschiede wünschen.

Sie können die Konstante 25 in eine beliebige Anzahl von Kilometern ändern, für die der Boost gleich sein soll.

Sie können den Abstand Auftrieb als solche definieren:

div(1.0, min(1000, max(25, geodist()))) 

distance boost plot

Verwandte Themen