2010-10-02 9 views
10

Im Umschalten Volltextsuche auf meiner Website zu Sphinx. Ich werde SphinxSE verwenden, um die Suche durchzuführen.Verwenden von Haupt- und Delta-Indizes in Sphinx

Ich habe 2-Indizes, wie im Handbuch angegeben: http://www.sphinxsearch.com/docs/manual-0.9.9.html#live-updates

Es scheint zu funktionieren, und Index unterschiedliche Sachen in einen eigenen Index, aber ich bin ein wenig verwirrt darüber, wie ich die Index-Aktualisierungs behandeln sollte, Zusammenführen und Wiederaufbau.

Die Art, wie ich verstehe, ist ich cron es, "Indexer Delta - Rotation" alle 5 Minuten oder so zu laufen, die neue Beiträge in den Index hinzufügen würde. Dann würde ich einmal am Tag den Delta-Index in den Hauptindex zusammenführen, indem ich "indexer main delta-rotate" ausführen würde. dann werde ich einmal pro Monat "indexer --all" ausführen, um alle Indizes neu zu erstellen.

Mache ich das richtig, oder fehle ich etwas?

+0

Für das Protokoll - das ist so ziemlich mein Setup, alles via cron. +1 für die Frage, wie ich es skizziert habe, wie es gerade läuft. Lasst uns diese Best Practices hören! –

+0

Es ist nur jedes Mal, wenn Sie einen dieser Befehle ausführen .... würde die Suche nicht funktionieren, während es läuft? –

+0

Nun, in meinem Fall .. indexer --all --rotate --config /path/to/sphinx.conf führt in 0,024 Sekunden (75.000 Dokumente pro Sekunde, mit 5 Indizes für 4 Domänen). Wenn meine Indizes erheblich wachsen, hätte ich ein Problem. –

Antwort

2

--rotate würde nur Index in tmp (brauchen Speicherplatz Diskette) und wechseln + neu starten suchen, wenn es fertig ist.

über Delta, müssen Sie Pre-Abfrage verwenden, um die "Grenze" Max (ID) die Hauptindizes ID unter dem Grenzwert zu berechnen, und Delta ist bis zu diesem Limit.

, wenn Sie einen Zeitstempel haben (indiziert, wenn möglich) Sie es

Haupt verwenden -> wo timefile < heute() Delta -> wo timefile> = heute()

3

Klingt ziemlich ähnlich wie das Setup für einen Kunden. Und nein, die Suche wird während der Aktualisierung nicht aufhören zu arbeiten. Aus der Sphinx-Dokumentation:

--rotate wird für rotierende Indizes verwendet. Wenn Sie nicht die Situation haben, können Sie die Suchfunktion Offline ohne störende Benutzer nehmen, müssen Sie fast sicher Suche laufen lassen, während neue Dokumente indizieren. --rotate erzeugt einen zweiten Index, parallel zum ersten (in der gleichen Stelle, einfach einschließlich .new in die Dateinamen). Nach Abschluss dieses Vorgangs Indexer benachrichtigt searchd über das Senden des SIGHUP-Signal und searchd wird Versuch, die Indizes zu umbenennen (Umbenennung der bestehenden .old aufzunehmen und Umbenennung des .new sie zu ersetzen), und starten Sie dann vom Dienst die neueren Dateien. Abhängig von der Einstellung von seamless_rotate, kann es eine leichte Verzögerung bei der Suche der neueren Indizes geben.