Mit Hilfe einer Funktion in einer Filterabfrage in Solr
Frage
Ich möchte mein Ergebnis gesetzt filtern, bevor ich zu suchen. Ich weiß, dass der richtige Weg, dies zu tun ist durch die Filterabfrage (FQ) Parameter verwendet wird. Ich möchte jedoch auf der Grundlage der Ausgabe einer Funktion auf einem Feld durchgeführt filtern.
Ich habe ein Feld ‚Bewertung‘, die eine ganze Zahl im Bereich von 1 bis ~ 75000 ist. Die Obergrenze kann sich ändern. Ich möchte mit der höchsten Bewertung der Nutzer "zu den Top-500-Elemente filtern. In SQL sein, dies wäre so etwas wie:
... ORDER BY rating DESC LIMIT 500
Ich glaube, ich kann die Dokumente in solr nach Bewertung absteigend mit der Funktion rord (Stern) auf Platz bekommen, so dass im Grunde würde ich tun:
fq=rord(rating):[0 TO 500]
Aber das scheint nicht möglich. Weiß jemand, was ich sonst noch tun könnte?
Lösung
Dank Yonik Seeley auf der Solr-Mailingliste:
Solr 1.4 können jetzt tun Bereichsabfragen auf beliebige Funktionen: http://lucene.apache.org/solr/ api / org / apache / Solr / search / FunctionRangeQParserPlugin.html
Beachten Sie, dass ord () und rord () wird nicht funktionieren richtig in Solr 1.4 Stamm. Lucene hat per-Segment in einem Benutzer geändert Multireader und damit werden Sie derzeit erhalten die ord () oder rord () in dass das Segment, nicht im gesamten Index.
Andere Tipps
Es sei denn, ich etwas fehle, könnten Sie nicht durch das Rating-Feld sortieren und dann nehmen Sie einfach die ersten 500, die zu Ihrem SQL-Beispiel identisch sein würden.