django_sphinx_db è un semplice database di backend Django che permette l'interazione con Sphinx via SphinxQL. Si tratta essenzialmente di default backend Django MySQL con alcune modifiche per Sphinx.
SphinxQL è una modalità clone MySQL che Sfinge searchd supporta. Esso consente di interrogare gli indici tramite sintassi SQL regolare vecchio. Se si utilizza RT (tempo reale) gli indici, è anche possibile aggiungere e aggiornare i documenti nell'indice.
Questo backend è pensato per essere configued come un database nel settings.py Django.
Questo pacchetto fornisce una classe Manager, SQLCompiler privato e di supporto codice per rendere questo possibile.
Utilizzo
Prima di tutto, è necessario definire una connessione al database nella configurazione Django. È inoltre necessario installare il router di database Sfinge e aggiungere django_sphinx_db all'elenco INSTALLED_APPS.
# Installare django_sphinx_db:
INSTALLED_APPS + = ('django_sphinx_db',)
# Questo è il nome del server sfinge in banche dati:
SPHINX_DATABASE_NAME = 'sfinge'
# Definire il collegamento Sfinge
DATABASE = {
& Nbsp; 'default': {
& Nbsp; # la connessione al database di default va qui ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; 'ENGINE': 'django_sphinx_db.backend.sphinx',
& Nbsp; # Il nome del database non ha importanza.
& Nbsp; 'NOME': '',
& Nbsp; # Non vi è alcun nome utente o password.
& Nbsp; 'USER': '',
& Nbsp; 'PASSWORD': '',
& Nbsp; # Non utilizzare localhost, questo si tradurrà in un utilizzando UDS invece di TCP ...
& Nbsp; 'HOST': '127.0.0.1',
& Nbsp; 'PORT': '9306',
& Nbsp;},
}
# ... E via di conseguenza ...
DATABASE_ROUTERS = (
& Nbsp; 'django_sphinx_db.routers.SphinxRouter',
) `` `
Quindi definire un modello che deriva dal SphinxModel. Come al solito, il modello sarà messo in models.py.
da django_sphinx_db.backend.models importare SphinxModel, SphinxField
MyIndex class (SphinxModel):
& Nbsp; Classe Meta:
& Nbsp; # Il prossimo bit è importante, non si vuole Django gestire
& Nbsp; # la tabella per questo modello.
& Nbsp; gestita = False
& Nbsp; name = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; data = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Configurazione Sphinx
Ora è necessario creare un file di configurazione per l'indice. Un comando di gestione è fornito per convertire la definizione del modello ad una configurazione adatta.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
Il file di configurazione generato dovrebbe essere un buon inizio tuttavia, siete invitati a rivedere la configurazione contro il [riferimento configurazione Sphinx] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Uso della Django ORM con Sphinx
È ora possibile interrogare e gestire l'indice in tempo reale utilizzando il Django ORM. È possibile inserire e aggiornare i documenti nell'indice utilizzando i seguenti metodi. L'esempio seguente utilizza la [biblioteca fulltext] (https://github.com/btimby/fulltext) per leggere il contenuto dei file come testo normale.
os di importazione, il tempo, documento
# Aggiungere un documento all'indice.
path = 'resume.doc'
st = os.stat (percorso)
MyIndex.objects.create (
& Nbsp; name = percorso,
& Nbsp; content = fulltext.get (percorso, ''),
& Nbsp; size = st.st_size,
& Nbsp; data = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime)),
)
# Aggiornare un documento nell'indice
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (percorso, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime))
doc.save ()
È possibile eseguire query full-text utilizzando l'operatore di ricerca Django. Leggere la documentazione Django per ulteriori informazioni.
MyIndex.objects.filter (content__search = 'Foobar')
La query viene fatto passare attraverso direttamente alla Sfinge, quindi la sintassi di query estesa Sfinge è rispettata.
Test delle unità
Il backend Sphinx per Django ignorerà le chiamate create_test_db e destroy_test_db. Queste chiamate non riuscirà quando il database Sfinge è configurato, che impedisce di test in esecuzione. Tuttavia, questo significa che qualsiasi database Sphinx configurato verrà utilizzato durante la prova. Finchè si scrive i test con questo in mente, non ci dovrebbero essere problemi. . Ricordate che è possibile utilizzare il parametro di connessione al database nome_test inoltrare i quesiti ad una connessione al database diverso durante corse di prova
Requisiti :
- Python
- Django
I commenti non trovato