django_sphinx_db är en enkel Django databas backend som tillåter interaktion med Sphinx via SphinxQL. Det är i grunden standard Django MySQL backend med några förändringar för Sphinx.
SphinxQL är en MySQL-klon läge som Sphinx searchd stödjer. Det gör att du kan söka index via vanliga gamla SQL-syntax. Om du använder RT (realtid) index, kan du även lägga till och uppdatera dokument i indexet.
Detta gränssnitt är tänkt att configued som en databas i Django settings.py.
Detta paket tillhandahåller en chef klass, SQLCompiler suite och stödja kod för att göra detta möjligt.
Användning
Först av allt måste du definiera en databasanslutning i Django konfigurationen. Du måste också installera Sphinx databas routern och lägga django_sphinx_db till din INSTALLED_APPS listan.
# Installera django_sphinx_db:
INSTALLED_APPS + = ('django_sphinx_db ",)
# Det här är namnet på sfinxen servern i databaser:
SPHINX_DATABASE_NAME = 'sfinx "
# Definiera anslutningen till Sphinx
DATABASER = {
& Nbsp; 'default': {
& Nbsp; # Din förvalda databasanslutning går här ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; 'MOTOR': 'django_sphinx_db.backend.sphinx ",
& Nbsp; # Databasen namn spelar ingen roll.
& Nbsp; 'NAMN': '',
& Nbsp; # Det finns ingen användarnamn eller lösenord.
& Nbsp; "användare": '',
& Nbsp; 'LÖSENORD': '',
& Nbsp; # Använd inte localhost, detta kommer att resultera i att använda en UDS istället för TCP ...
& Nbsp; 'HOST': '127.0.0.1 ",
& Nbsp; 'PORT': '9306',
& Nbsp;},
}
# ... Och vägen därefter ...
DATABASE_ROUTERS = (
& Nbsp; 'django_sphinx_db.routers.SphinxRouter ",
) `` `
Sedan definierar en modell som härstammar från SphinxModel. Som vanligt kommer modellen att placeras i models.py.
från django_sphinx_db.backend.models importera SphinxModel, SphinxField
klass MyIndex (SphinxModel):
& Nbsp; klass Meta:
& Nbsp; # Denna nästa bit är viktigt, att du inte vill Django hantera
& Nbsp; # tabellen för denna modell.
& Nbsp; förvaltas = False
& Nbsp; name = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; date = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Konfigurera Sphinx
Nu måste du skapa en konfigurationsfil för ditt index. En ledningskommando tillhandahålls för att omvandla den modelldefinition till en lämplig konfiguration.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
Den genererade konfigurationsfil bör vara en bra början men du uppmanas att granska konfigurationen mot [Sphinx konfigurations referens] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Använda Django ORM med Sphinx
Nu kan du söka och hantera din realtid index med hjälp av Django ORM. Du kan infoga och uppdatera dokument i indexet med hjälp av följande metoder. Exemplet nedan använder [fulltext biblioteket] (https://github.com/btimby/fulltext) för att läsa filens innehåll som vanlig text.
import os, tid, fulltext
# Lägg ett dokument till index.
path = 'resume.doc'
st = os.stat (väg)
MyIndex.objects.create (
& Nbsp; name = sökväg,
& Nbsp; content = fulltext.get (väg, ''),
& Nbsp; size = st.st_size,
& Nbsp; date = time.strftime ('% Y-% m-% d% H:% M:% S ", time.localtime (st.st_mtime)),
)
# Uppdatera ett dokument i indexet
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (väg, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S ", time.localtime (st.st_mtime))
doc.save ()
Du kan utföra fulltext frågor med hjälp av Django sökoperatorn. Läs Django dokumentationen för mer information.
MyIndex.objects.filter (content__search = 'Foobar')
Frågan förs genom direkt till Sphinx, så Sfinxen förlängt frågesyntax respekteras.
Enhet Test
Sfinxen backend för Django ignorerar create_test_db och destroy_test_db samtal. Dessa samtal kommer att misslyckas när Sphinx databasen är konfigurerad, hindrar dig från att köra tester. Detta innebär dock att alla konfigurerade Sphinx databas kommer att användas vid provning. Så länge du skriver dina tester med detta i åtanke bör det inte vara några problem. . Kom ihåg att du kan använda parametern TEST_NAME databasanslutning för att omdirigera förfrågningar till en annan databas anslutning under testkörningar
Krav :
- Python
- Django
Kommentarer hittades inte