django_sphinx_db yra paprasta Django duomenų bazė posistemės, kuri leidžia bendrauti su Sphinx per SphinxQL. Tai iš esmės yra numatytoji Django MySQL posistemės su kai kuriomis Sfinksas pokyčius.
SphinxQL yra MySQL klonas režimas, Sfinksas searchd palaiko. Jis leidžia jums atlikti paiešką indeksus paprastu senosios SQL sintaksė. Jei naudojate RT (realaus laiko) indeksus, taip pat galite pridėti ir atnaujinti dokumentai indeksą.
Ši posistemė yra skirtas būti configued kaip duomenų bazės į Django settings.py.
Šis paketas suteikia Manager klasė, SQLCompiler komplektą ir remti kodą, kad tai įmanoma.
Naudojimas
Pirmiausia turite nustatyti duomenų bazę į Django konfigūracijos. Jūs taip pat turite įdiegti Sphinx duomenų bazės maršrutizatorių ir pridėti django_sphinx_db savo INSTALLED_APPS sąrašą.
# Įdiegti django_sphinx_db:
INSTALLED_APPS + = ("django_sphinx_db")
# Tai sfinkso serverio duomenų bazėse pavadinimas:
SPHINX_DATABASE_NAME = 'Sfinksas "
# Nustatykite ryšį su Sphinx
DUOMENŲ BAZĖS = {
& Nbsp; "pagal nutylėjimą": {
& Nbsp; # Jūsų numatytasis duomenų bazę eina čia ...
& Nbsp;}
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; "VARIKLIS": "django_sphinx_db.backend.sphinx"
& Nbsp; # duomenų bazės pavadinimas neturi reikšmės.
& Nbsp; "PAVADINIMAS": ",
& Nbsp; # Nėra vartotojo vardas arba slaptažodis.
& Nbsp; "naudotojas": ",
& Nbsp; "PASSWORD": ",
& Nbsp; # Nenaudokite localhost, tai sukels naudojant UDS vietoj TCP ...
& Nbsp; "host": "127.0.0.1"
& Nbsp; "PORT": "9306",
& Nbsp;}
}
# ... Ir maršrutas pakeistas ...
DATABASE_ROUTERS = (
& Nbsp; "django_sphinx_db.routers.SphinxRouter"
) `` `
Tada nustatyti modelį, pagrįstą iš SphinxModel. Kaip įprasta, modelis bus patalpinta models.py.
nuo django_sphinx_db.backend.models importuoti SphinxModel, SphinxField
klasė MyIndex (SphinxModel):
& Nbsp; klasės meta:
& Nbsp; # Tai naujos tiek yra svarbu, jūs nenorite Django valdyti
& Nbsp; # šiam modeliui stalo.
& Nbsp; sugebėjo = false
& Nbsp; vardas = SphinxField ()
& Nbsp; kiekis = SphinxField ()
& Nbsp; datą = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
konfigūravimas Sfinksas "
Dabar jums reikia sukurti konfigūracijos failą savo indekso. Valdymo komanda yra numatyta konvertuoti modelio apibrėžimą į tinkamą konfigūraciją.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; VI /etc/sphinx.conf
Sukurta konfigūracijos failas turi būti gera pradžia, tačiau jūs paragino peržiūrėti prieš [Sfinksas konfigūracijos nuoroda] konfigūraciją (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Naudojant Django ORM su Sfinksas "
Dabar galite užklausti ir valdyti savo realaus laiko indeksą naudojant Django ORM. Galite įterpti ir atnaujinti dokumentus indeksą naudojant šiuos metodus. Toliau pateiktas pavyzdys naudoja [pilną biblioteką] (https://github.com/btimby/fulltext) skaityti failo turinį kaip paprastas tekstas.
importo os, laikas, Fulltext
# Pridėti dokumentą indeksą.
Kelias = 'resume.doc "
g = os.stat (kelias)
MyIndex.objects.create (
& Nbsp; vardas = kelias,
& Nbsp; kiekis = fulltext.get (kelias, "),
& Nbsp; size = st.st_size,
& Nbsp; datą = time.strftime ("% Y-% m-% d% H:% M:% S", time.localtime (st.st_mtime)),
)
# Atnaujinti indekse dokumentą
doc = MyIndex.objects.get (PK = 1)
doc.content = fulltext.get (kelias ")
doc.size = st.st_size
doc.date = time.strftime ("% Y-% m-% d% H:% M:% S", time.localtime (st.st_mtime))
doc.save ()
Jūs galite atlikti viso teksto užklausas per Django paieškos operatorių. Skaityti Django dokumentus gauti daugiau informacijos.
MyIndex.objects.filter (content__search = 'foobar')
Užklausa pro tiesiogiai Sfinksas, todėl laikomasi Sfinksas pratęstas užklausos sintaksę.
padalinio testavimas
Sfinksas posistemės už Django bus ignoruoti create_test_db ir destroy_test_db skambučius. Šie skambučiai žlugs, kai Sfinksas bazė yra sukonfigūruotas, neleisti jums veikia bandymus. Tačiau tai reiškia, kad bet kuris sukonfigūruotas Sphinx duomenų bazė bus naudojami bandymo metu. Tol, kol jūs rašote savo bandymus atsižvelgiant į tai, kad turėtų būti ne problema. . Nepamirškite, kad jūs galite naudoti TEST_NAME duomenų bazę parametrą nukreipti užklausas į kitą duomenų bazę per bandomuosius važiavimus
Reikalavimai :
- Python
- Django
Komentarai nerastas