django_sphinx_db er en simpel Django database backend, der tillader interaktion med Sphinx via SphinxQL. Det er dybest set standard Django MySQL backend med nogle ændringer for Sphinx.
SphinxQL er en MySQL klon mode, Sphinx searchd understøtter. Det giver dig mulighed for at forespørge indekser via regelmæssig gamle SQL syntaks. Hvis du bruger RT (realtid) indekser, kan du også tilføje og opdatere dokumenter i indekset.
Denne backend er beregnet til at blive configued som en database i Django settings.py.
Denne pakke indeholder en manager klasse, SQLCompiler suite og støtte kode til at gøre dette muligt.
Anvendelse
Først og fremmest, skal du definere en databaseforbindelse i Django konfiguration. Du skal også installere Sphinx database routeren og tilføje django_sphinx_db til din INSTALLED_APPS listen.
# Installer django_sphinx_db:
INSTALLED_APPS + = ('django_sphinx_db «,)
# Dette er navnet på sfinksen server i databaser:
SPHINX_DATABASE_NAME = 'sphinx'
# Definer forbindelsen til Sphinx
DATABASER = {
& Nbsp; "misligholdelse": {
& Nbsp; # Din standard database forbindelse går her ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; "motor": "django_sphinx_db.backend.sphinx«,
& Nbsp; # Databasenavnet ligegyldigt.
& Nbsp; "NAME": '',
& Nbsp; # Der er ingen brugernavn eller adgangskode.
& Nbsp; "bruger": '',
& Nbsp; 'password': '',
& Nbsp; # Brug ikke localhost, dette vil resultere i at bruge en UDS i stedet for TCP ...
& Nbsp; "HOST": "127.0.0.1",
& Nbsp; "PORT«: »9306«,
& Nbsp;},
}
# ... Og rute i overensstemmelse hermed ...
DATABASE_ROUTERS = (
& Nbsp; "django_sphinx_db.routers.SphinxRouter«,
) `` `
Derefter definere en model, der stammer fra det SphinxModel. Som sædvanlig vil modellen blive placeret i models.py.
fra django_sphinx_db.backend.models importerer SphinxModel, SphinxField
klasse MyIndex (SphinxModel):
& Nbsp; klasse Meta:
& Nbsp; # Dette næste bit er vigtigt, du ikke ønsker Django at administrere
& Nbsp; # tabellen for denne model.
& Nbsp; lykkedes = False
& Nbsp; name = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; date = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Konfiguration Sphinx
Nu skal du generere en opsætningsfil til indekset. En styring kommando er tilvejebragt for at konvertere definition model til en egnet konfiguration.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
Den genererede config fil skal være en god start men du bliver opfordret til at gennemgå konfigurationen mod [Sphinx konfigurationen reference] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Brug af Django ORM med Sphinx
Du kan nu søge og administrere din realtid indeks ved hjælp af Django ORM. Du kan indsætte og opdatere dokumenter i indekset ved hjælp af følgende metoder. Nedenstående eksempel bruger [fuldtekst bibliotek] (https://github.com/btimby/fulltext) til læsning fil indhold som almindelig tekst.
import- os, tid, fuldtekst
# Tilføj et dokument til indekset.
sti = 'resume.doc'
st = os.stat (sti)
MyIndex.objects.create (
& Nbsp; name = sti,
& Nbsp; content = fulltext.get (sti, ''),
& Nbsp; size = st.st_size,
& Nbsp; date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime)),
)
# Opdater et dokument i indekset
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (sti, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime))
doc.save ()
Du kan udføre fuldtekst forespørgsler vha Django søgeoperator. Læs Django dokumentation for mere information.
MyIndex.objects.filter (content__search = 'Foobar)
Forespørgslen sendes gennem direkte til Sphinx, så Sfinksen udvidet forespørgsel syntaks respekteres.
Unit Testing
Den Sphinx backend for Django ignorerer create_test_db og destroy_test_db opkald. Disse opkald vil mislykkes, når Sphinx-databasen er konfigureret, forhindrer dig kører tests. Men det betyder, at enhver konfigureret Sphinx database vil blive brugt under test. Så længe du skriver din test med dette i tankerne, bør der ikke være noget problem. . Husk, at du kan bruge parameter TEST_NAME databaseforbindelse at omdirigere forespørgsler til en anden database forbindelse under prøvekørsler
Krav :
- Python
- Django
Kommentarer ikke fundet