django_sphinx_db jest prosta Django zaplecza bazy danych, która umożliwia interakcję z Sfinksa poprzez SphinxQL. To jest po prostu domyślne Django MySQL backend z pewnymi zmianami dla Sfinksa.
SphinxQL jest tryb klon MySQL, że Sfinks searchd wspiera. To pozwala na zapytanie indeksy poprzez składnię starym SQL. Jeśli używasz RT (Real Time) indeksy, można również dodawać i dokumenty aktualizacyjne w indeksie.
To narzędzie nie jest przeznaczona do configued jako bazy w settings.py Django.
Ten pakiet zawiera klasy menedżera, SQLCompiler apartament i kod wspieranie aby było to możliwe.
Zastosowanie
Przede wszystkim należy zdefiniować połączenie z bazą danych w konfiguracji Django. Należy również zainstalować router bazy danych Sphinx i dodać django_sphinx_db do listy INSTALLED_APPS.
# Zainstaluj django_sphinx_db:
INSTALLED_APPS + = ("django_sphinx_db")
# To jest nazwa serwera Sfinks w bazach danych:
SPHINX_DATABASE_NAME = "Sfinks"
# Określenie połączenia Sfinksa
BAZY DANYCH = {
& Nbsp; "default": {
& Nbsp; # Połączenie domyślną bazą idzie tutaj ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; "silnik": "django_sphinx_db.backend.sphinx",
& Nbsp; # Nazwa bazy danych nie ma znaczenia.
& Nbsp; 'NAZWA': '',
& Nbsp; # Nie ma nazwy użytkownika lub hasła.
& Nbsp; 'user': '',
& Nbsp; 'Hasło': '',
& Nbsp; # Nie stosować lokalnie, to w wyniku korzystania z UDS zamiast TCP ...
& Nbsp; "HOST": "127.0.0.1",
& Nbsp; "PORT": "9306",
& Nbsp;},
}
# ... I droga w związku z ...
DATABASE_ROUTERS = (
& Nbsp; "django_sphinx_db.routers.SphinxRouter",
) `` `
Następnie określić model, który wynika z SphinxModel. Jak zwykle, model zostanie umieszczony w models.py.
z django_sphinx_db.backend.models importować SphinxModel, SphinxField
Klasa MyIndex (SphinxModel):
& Nbsp; class Meta:
& Nbsp; # Następny bit jest ważne, nie chcesz Django do zarządzania
& Nbsp; # Stół dla tego modelu.
& Nbsp; udało = False
& Nbsp; name = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; data = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Konfiguracja Sphinx
Teraz trzeba wygenerować plik konfiguracyjny dla indeksu. Polecenie zarządzania jest do konwersji definicji modelu do odpowiedniej konfiguracji.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
Wygenerowany plik konfiguracyjny powinien być dobry początek jednak to wzywa do przeglądu konfiguracji przeciwko [odniesienie konfiguracji Sphinx] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Używanie Django ORM z Sphinx
Można teraz wyszukiwać i zarządzanie w czasie rzeczywistym indeksu za pomocą Django ORM. Można wstawiać i aktualizować dokumenty w indeksie, przy użyciu jednej z następujących metod. Poniższy przykład używa biblioteki [pełny tekst] (https://github.com/btimby/fulltext) do czytania zawartości pliku jako zwykły tekst.
os import, czas, pełny
# Dodaj dokument z indeksem.
path = "resume.doc"
st = os.stat (ścieżka)
MyIndex.objects.create (
& Nbsp; name = ścieżka,
& Nbsp; content = fulltext.get (ścieżka, ''),
& Nbsp; size = st.st_size,
& Nbsp; data = time.strftime ('% Y-% m-% d% H:% M:% S, time.localtime (st.st_mtime)),
)
# Aktualizacja dokumentu w indeksie
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (ścieżka, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S, time.localtime (st.st_mtime))
doc.save ()
Można wykonać zapytania pełnotekstowego pomocą operatora wyszukiwarki Django. Przeczytaj w dokumentacji Django, aby uzyskać więcej informacji.
MyIndex.objects.filter (content__search = "Foobar")
Zapytanie przechodzi przez bezpośrednio do Sfinksa, więc składnia rozszerzony zapytania Sphinx jest przestrzegana.
Unit Testing
Sfinks zaplecza dla Django zignoruje create_test_db i destroy_test_db połączeń. Te połączenia nie powiedzie się, gdy jest skonfigurowany w bazie Sphinx, uniemożliwiając testów z systemem. Oznacza to jednak, że każda skonfigurowanej bazy danych Sphinx będzie używany w czasie badania. Tak długo, jak pisać testy mając to na uwadze, nie powinno być problemu. . Pamiętaj, że możesz użyć parametru połączenia z bazą danych nazwa_testu przekierować zapytania do innego połączenia z bazą danych w czasie prób
Wymagania :
- Python
- Django
Komentarze nie znaleziono