2017-06-20 1 views
0

Ich bin ein haystack Anfänger, und ich versuche herauszufinden, wie Sie ein Dokument aktualisieren.Wie aktualisiert man einen einzelnen Datensatz für Django-Heuhaufen?

Ich habe folgendes Suchindex:

class ProductIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True) # contains keywords associated with the product 
    name= indexes.CharField(model_attr='name') 

    def get_model(self): 
     return Product 

    def prepare_text(self, obj): 
     return [tag.keyword for tag in obj.productkeywords_set.all()] 

Ich möchte das text Feld aktualisieren, wenn ein Benutzer ein neues Produkt Schlüsselwort hinzufügt. Ich habe über 80k Datensätze, so dass es eine sehr lange Zeit dauert, wenn ich python manage.py update_index verwenden. Gibt es eine Möglichkeit, nur one Dokument zu aktualisieren?

Antwort

0

Sie Signalprozessor https://django-haystack.readthedocs.io/en/master/signal_processors.html#realtime-realtimesignalprocessor

Die anderen enthalten ist der Signalprozessor haystack.signals.RealtimeSignalProcessor Klasse verwenden könnte. Es ist eine extrem dünne Erweiterung der BaseSignalProcessor-Klasse, die sich nur darin unterscheidet, dass sie die setup/teardown-Methoden implementiert und BELIEBIGES Modell speichern/löschen an den Signalprozessor bindet.

Wenn dem Modell ein Suchindex zugeordnet ist, löst der RealtimeSignalProcessor dann eine Aktualisierung/Löschung dieser Modellinstanz innerhalb des eigentlichen Suchindex aus.

Konfiguration wie folgt aussieht:

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

Diese alle Suchindex Klassen verursacht in einer Echtzeit-Mode zu arbeiten.

Durch die Aktivierung es Ihr Index automatisch aktualisiert wird beim Speichern/Löschen auf dem Modell

+0

Danke. Der RealtimeSignalProcessor hat funktioniert! – ttmtran

Verwandte Themen