Frage Django-Heuhaufen-Bestellung - Wie gehe ich damit um?


Ich benutze Django-Heuhaufen für eine Suchseite auf meiner Seite. Ich bin im Grunde fertig, aber nicht ganz glücklich mit der Bestellung und nicht ganz sicher, wie Heuhaufen entscheidet, wie alles zu bestellen ist.

Ich weiß, dass ich das SearchQuerySet mithilfe von übersteuern kann order_by aber das überfordert es völlig. Nehmen wir an, ich möchte die Suche durch "Auf Lager" (BooleanField) erzwingen, so dass die Produkte, die auf Lager sind, oben angezeigt werden, aber dann alles andere tun, als es normalerweise der Fall wäre. Wie mache ich das?

Ich habe es versucht order_by('-in_stock', 'content') Der Bildinhalt war das, was er standardmäßig verwendete, aber er erzeugt sehr unterschiedliche Ergebnisse, wenn ich ihn einfach belasse, um seine eigene Reihenfolge zu erstellen.

Vielen Dank für Ihre Anregungen!


8
2018-06-08 17:49


Ursprung


Antworten:


Sie müssen einen Index in Ihrer search_indexes.py mit in_stock haben:

class YourModel(indexes.SearchIndex):
    in_stock = indexes.BooleanField(model_attr='model_in_stock')

und in deinen URLs:

sqs = SearchQuerySet().models(YourModel).order_by('-in_stock', 'score') # score is a field of haystack

Auf diese Weise zeigen Sie die Ergebnisse zuerst an, wenn sie auf Lager sind, und dann nach Punkten!


18
2018-06-23 21:32



Um nach einem CharField zu sortieren, machen Sie es speicherbar, aber nicht indexierbar.

sorted_name = indexes.CharField(indexed=False, stored=True)

Wenn Sie es sortierbar und indexierbar haben möchten, verwenden Sie zwei verschiedene Felder im Suchindex.


2
2018-01-27 17:15