Domanda

Ho appena installato django-sphinx e funziona magnificamente. Ora sono in grado di cercare il mio modello e ottenere risultati sorprendenti. L'unico problema è che devo costruire l'indice a mano usando il comando indicizzatore. Ciò significa che ogni volta che aggiungo nuovi contenuti, devo colpire manualmente la riga di comando per ricostruire l'indice di ricerca. Questo non è accettabile.

Potrei fare un lavoro cron che esegue automaticamente il comando indicizzatore ogni tanto, ma è tutt'altro che ottimale. I nuovi dati non verranno indicizzati fino a quando il cron non verrà eseguito nuovamente. Inoltre, l'indicizzatore verrà eseguito inutilmente la maggior parte delle volte poiché il mio sito non ha dati aggiunti molto spesso.

Come posso impostarlo in modo che l'indice Sphinx si ricostruisca automaticamente ogni volta che i dati vengono aggiunti o modificati in un modello di django ricercabile?

È stato utile?

Soluzione

Esistono sostanzialmente due strategie principali per la creazione di indici di ricerca:

  1. Indicizzatore interno a un server di database, che indicizza al volo quando i record vengono inseriti o eliminati.
  2. Indicizzatore esterno al database (che potrebbe essere o meno un RDMS, motivo per cui lascio fuori dal word server), che indicizza periodicamente.

La prima strategia ha l'ovvio vantaggio di essere più vicina al tempo reale ma probabilmente di un enorme svantaggio nelle prestazioni. La maggior parte dei server di database con indicizzatori interni presenta problemi di prestazioni (o altre funzionalità mancanti), ad esempio Jeff Atwood parla dei problemi di prestazioni in SQL Server 2008 nel suo post di blog su aggiunta di un secondo server per stackoverflow .

La seconda strategia non è così in tempo reale ma generalmente ha le migliori prestazioni, purtroppo ciò significa anche che, poiché non è integrata, deve essere invocata esternamente in qualche modo.

Ovviamente non hai scelta con Sphinx , essendo un indicizzatore esterno. Devi invocare l'indicizzatore della sfinge da cron o da qualche altro meccanismo di pianificazione.

Per accelerare l'indicizzazione basta eseguirlo spesso da cron. Se ciò causa problemi di prestazioni, devi implementare una strategia di aggiornamento in tempo reale che comporta l'indicizzazione di nuovi record molto frequentemente in un indice delta e quindi l'unione periodica dell'indice delta nell'indice primario. Ciò sarebbe fatto esternamente a Django, quindi non influisce su nulla in django-sphinx .

Altri suggerimenti

Quanto sopra sembra giusto per me, anche se menzionerò che potresti chiamare l'indicizzatore dalla tua funzione di salvataggio per l'oggetto.

Probabilmente verrebbe chiamato MOLTO, ma potrebbe funzionare. Chiamalo come faresti con qualsiasi comando esterno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top