Frage

Ich habe gerade Setup django-Sphinx, und es funktioniert wunderbar. Ich bin jetzt in der Lage meines Modell zu suchen und erstaunliche Ergebnisse zu erzielen. Das einzige Problem ist, dass ich den Index von Hand bauen den Indexer-Befehl. Das bedeutet, dass jedes Mal, wenn ich neue Inhalte hinzufügen, ich muß manuell über die Befehlszeile trifft den Suchindex neu zu erstellen. Das ist einfach nicht akzeptabel.

Ich kann einen cron-Job machen, die automatisch jeder so oft den Indexer Befehl ausgeführt wird, aber das ist bei weitem nicht optimal. Neue Daten werden nicht indiziert werden, bis die cron wieder läuft. Darüber hinaus läuft der Indexer unnötig die meiste Zeit als meine Seite Daten sehr oft hinzugefügt hat nicht.

Wie kann ich es so, dass die Sphinx Index wird sich automatisch wieder aufbauen, wenn Daten oder modifiziert in einem durchsuchbaren django Modell hinzugefügt wird?

War es hilfreich?

Lösung

Es gibt grundsätzlich zwei primäre Strategien für den Aufbau von Suchindizes:

  1. Indexer intern zu einem Datenbankserver, die Indizes für die Fliege als Datensätze eingefügt oder gelöscht werden.
  2. Indexer externe in die Datenbank (die kann oder auch nicht ein RDMS sein, weshalb ich das Wort Server weglassen), die Indizes in regelmäßigen Abständen.

Die erste Strategie hat den offensichtlichen Vorteil, näher an Echtzeit zu sein, aber möglicherweise ein großer Nachteil in der Leistung. Die meisten Datenbankserver mit internen Indexer haben Performance-Probleme (oder auch fehlende Features), siehe zum Beispiel Jeff Atwood Performance-Probleme in SQL Server 2008 diskutiert in seiner Blog-Post über einen zweiten Server für Stackoverflow hinzufügen.

Die zweite Strategie ist nicht so in Echtzeit aber in der Regel der beste Leistung hat, leider auch bedeutet dies, weil es nicht eingebaut ist, muss es von außen irgendwie aufgerufen werden.

Offensichtlich Sie haben keine andere Wahl, mit Sphinx es einem externen Indexer zu sein. Sie müssen die Sphinx Indexer von cron oder einem anderen Scheduling-Mechanismus aufrufen.

Zur Beschleunigung Indizierung es nur oft läuft von cron. Wenn die Performance-Probleme verursacht, dann müssen Sie eine rel="noreferrer"> welches beinhaltet neue Datensätze Indexieren sehr häufig in einen Delta-Index und dann periodisch den Deltaindex in den Primärindex verschmelzen. Dies würde außerhalb Django getan werden, damit es nicht alles beeinflusst in django-Sphinx .

Andere Tipps

Das oben klingt richtig für mich, obwohl ich schon erwähnt, dass Sie den Indexer von Ihrer Speicherfunktion für das Objekt aufrufen kann.

Es wäre wahrscheinlich viel aufgerufen, aber es könnte funktionieren. nennen Sie es einfach wie jeden externen Befehl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top