2017-02-23 3 views
1

In Wagtails Dokumentation auf ElasticSearch indexing scheint es, dass alle Instanzen eines bestimmten Modells zum Index hinzugefügt werden. Aber ich möchte einige (viele) Zeilen davon abhalten, indiziert zu werden, entweder indem ich ein QuerySet erstelle oder in der Lage bin, einen exclude Parameter irgendeiner Art zu setzen (QuerySet wäre besser).Wagtail Indizierung: Einige Inhalte ausschließen oder Querieset verwenden?

Gibt es eine Möglichkeit, dies zu tun? Oder muss ich WT-Modelle von außerhalb der Bachstelze indizieren?

Antwort

2

Sie können eine get_indexed_objects-Methode für die Modellklasse definieren, eine queryset von der Rückkehr Artikel indiziert werden:

@classmethod 
def get_indexed_objects(cls): 
    return cls.objects.filter(live=True) 
+1

Funktioniert wunderbar danke! Ich werde demnächst einen Doc-Patch schicken. – shacker

1

Wenn Sie nur ein paar einfache Filterung der Ergebnisse durchführen müssen, ich würde empfehlen, alles Indizierung und die Filterung bei Abfrage-Zeit zu tun (es sei denn, Sie sind ohne eine ganze Menge von Dokumenten Festplattenspeicher zu sparen):

MyModel.objects.filter(live=True).search("..") 

Bachstelze wird diesen Filter in einem Teil der Elasticsearch Abfrage konvertieren, so dass dieser shouldn‘ t keinen bemerkbaren Effekt auf Pe haben rformance. Dies erfordert jedoch, dass alle Filterfelder unter Verwendung von index.FilterField indiziert werden (Wagtail hat dies für alle grundlegenden Seitenfelder getan, wenn Sie das Seitenmodell verwenden).

Der Hauptvorteil dieses Ansatzes besteht darin, dass Sie den Filter problemlos löschen können, wenn Sie dies in Zukunft für eine separate Suchfunktion benötigen. Wagtail zum Beispiel erlaubt dies, alle Seiten im Admin zu durchsuchen, aber nur Live-Dateien im Frontend.

+0

Danke Karl. In unserem Fall kann es einige Datenschutzprobleme geben, bei denen wir vorsichtig sein müssen, wenn es darum geht, bestimmte Datensätze zu umschließen. Daher ist es wichtig, sie aus dem Index herauszuhalten. Aber als allgemeiner Ansatz haben Sie Recht - alles zu indexieren und dann zu filtern gibt Ihnen generell mehr Flexibilität. – shacker

Verwandte Themen