2016-10-13 4 views
-1

Ich möchte alle Dokumente, die inv = 0 (mögliche Werte von 0 bis 1000) bis zum Ende der Ergebnismenge haben. Ich habe andere Sortieroptionen wie Name desc auch als Teil der Abfrage.Solr degree alle Dokumente mit Bedingung

Zum Beispiel sind unter meinem solr Dokumente

Doc1 : name=apple , Inv=2 
Doc2 : name=ball , Inv=1 
Doc3 : name=cat , Inv=0 
Doc4 : name=dog , Inv=0 
Doc5 : name=fish , Inv=4 
Doc6 : name=Goat , Inv=5 

I unten Sortierung erreichen wollen ... hier, ich will mit inv alle Dokumente drücken = 0 nach unten nach unten und dann „name asc“ anwenden zu sortieren.

Doc1 
Doc2 
Doc5 
Doc6 
Doc3 
Doc4 

meine solr Anfrage ist wie

bq: "(: UND -inv:" 0 ")^999.0" & Deftype: "edismax"

hier 999 ist der Rang, den ich gegeben habe, um die Ergebnisse zu degradieren.

diese Erhöhung Abfrage funktioniert gut. Es verschiebt alle Dokumente mit inv = 0 nach unten.

Aber wenn ich & sort = name asc der Solr-Abfrage hinzufügen, priorisiert es "Sortierung" über bq..ich sehe unten Ergebnisse mit "name asc".

Doc1 : name=apple , Inv=2 
Doc2 : name=ball , Inv=1 
Doc3 : name=cat , Inv=0 
Doc4 : name=dog , Inv=0 
Doc5 : name=fish , Inv=4 
Doc6 : name=Goat , Inv=5 

kann mir bitte jemand helfen. ?

Antwort

0

Die einfache Lösung: Sie können zuerst nach inv sortieren, dann die anderen Werte. Dies erfordert, dass inv nur echte (1) oder falsche (0) Werte haben. Ich denke, das nicht der Fall ist, so:

Sie durch eine Funktion Abfrage sortieren können - und Sie die Funktion if unterschiedliche Werte zurückgeben basierend auf verwenden können, ob der Wert gesetzt ist oder nicht:

sort=if(inv, 1, 0) desc, name desc 

Wenn Solr inv nicht selbst auflösen kann, können Sie field(inv) verwenden, aber das sollte nicht notwendig sein.

Eine weitere Option ist die Funktion min verwenden entweder 1 oder 0 für das Sortierfeld zu bekommen, je nachdem, ob es im Inventar ist oder nicht:

sort=min(1, inv) 
+0

Dank. Aber ich möchte nicht nach Inv sortieren (Inventar kann Werte von 0 bis 1000 haben). Ich möchte nur nach Namen sortieren, habe aber alle Datensätze, die am Ende den Wert 0 haben. Ist die Kartenfunktion hier verwendbar. Wie kann ich es verwenden – user3085317

+0

"Alle Datensätze, die Wert 0 am Ende haben" ist standardmäßig Sortieren. Durch Verwendung der "if" -Funktionsabfrage, wie dargestellt (oder der Min-Version), sind die einzigen Werte entweder 0 oder 1 zum Sortieren. Das nächste Sortierfeld gibt dann die Richtung innerhalb dieser Sortierung wieder. Bitte geben Sie ein Beispiel, wenn dies nicht wie erwartet das richtige Ergebnis liefert. Die Verwendung einer Karte sollte nicht notwendig sein (wäre aber möglich), aber Sie müssten immer noch nach dem Wert sortieren, um die Dokumente als letzte zu erhalten. – MatsLindh

+0

Hallo, ich habe versucht & sort = min (1, Feld (inv)) desc, name_ntk desc es hat nicht funktioniert. – user3085317

Verwandte Themen