django_sphinx_db adalah backend database Django sederhana yang memungkinkan interaksi dengan Sphinx melalui SphinxQL. Hal ini pada dasarnya default Django MySQL backend dengan beberapa perubahan untuk Sphinx.
SphinxQL adalah mode clone MySQL yang Sphinx searchd mendukung. Hal ini memungkinkan Anda untuk query indeks via sintaks tua biasa SQL. Jika Anda menggunakan rt (real-time) indeks, Anda juga dapat menambahkan dan memperbarui dokumen dalam indeks.
Backend ini dimaksudkan untuk configued sebagai database dalam settings.py Django.
Paket ini menyediakan kelas Manager, SQLCompiler suite dan kode pendukung untuk membuat ini mungkin.
Penggunaan
Pertama-tama, Anda harus menentukan koneksi database dalam konfigurasi Django. Anda juga harus menginstal database router Sphinx dan menambahkan django_sphinx_db ke daftar INSTALLED_APPS Anda.
# Instal django_sphinx_db:
INSTALLED_APPS + = ('django_sphinx_db',)
# Ini adalah nama server sphinx di DATABASES:
SPHINX_DATABASE_NAME = 'sphinx'
# Tentukan koneksi ke Sphinx
DATABASES = {
& Nbsp; 'default': {
& Nbsp; # koneksi database default Anda pergi di sini ...
& Nbsp;},
& Nbsp; SPHINX_DATABASE_NAME: {
& Nbsp; 'ENGINE': 'django_sphinx_db.backend.sphinx',
& Nbsp; # Nama database tidak peduli.
& Nbsp; 'NAMA': '',
& Nbsp; # Tidak ada nama pengguna atau sandi.
& Nbsp; 'PENGGUNA': '',
& Nbsp; 'PASSWORD': '',
& Nbsp; # Jangan gunakan localhost, ini akan mengakibatkan menggunakan UDS bukan TCP ...
& Nbsp; 'HOST': '127.0.0.1',
& Nbsp; 'PORT': '9306',
& Nbsp;},
}
# ... Dan rute sesuai ...
DATABASE_ROUTERS = (
& Nbsp; 'django_sphinx_db.routers.SphinxRouter',
) `` `
Kemudian menentukan model yang berasal dari SphinxModel. Seperti biasa, model akan ditempatkan di models.py.
dari django_sphinx_db.backend.models impor SphinxModel, SphinxField
kelas MyIndex (SphinxModel):
& Nbsp; class Meta:
& Nbsp; # bit berikutnya adalah penting, Anda tidak ingin Django untuk mengelola
& Nbsp; # tabel untuk model ini.
& Nbsp; dikelola = False
& Nbsp; nama = SphinxField ()
& Nbsp; content = SphinxField ()
& Nbsp; date = models.DateTimeField ()
& Nbsp; size = models.IntegerField ()
Konfigurasi Sphinx
Sekarang Anda perlu untuk menghasilkan file konfigurasi untuk indeks. Perintah manajemen disediakan untuk mengubah definisi model untuk konfigurasi yang sesuai.
& Nbsp; python manage.py syncsphinx >> /etc/sphinx.conf
& Nbsp; vi /etc/sphinx.conf
File konfigurasi yang dihasilkan harus menjadi awal yang baik Namun, Anda disarankan untuk meninjau konfigurasi terhadap [referensi konfigurasi Sphinx] (http://sphinxsearch.com/docs/2.0.2/confgroup-index.html).
Menggunakan Django ORM dengan Sphinx
Sekarang Anda dapat melakukan query dan mengelola indeks real-time Anda menggunakan Django ORM. Anda dapat memasukkan dan memperbarui dokumen di indeks menggunakan metode berikut. Contoh di bawah ini menggunakan [perpustakaan fulltext] (https://github.com/btimby/fulltext) untuk membaca isi file sebagai teks biasa.
os impor, waktu, fulltext
# Tambahkan dokumen ke indeks.
path = 'resume.doc'
st = os.stat (path)
MyIndex.objects.create (
& Nbsp; nama = path,
& Nbsp; content = fulltext.get (jalan, ''),
& Nbsp; size = st.st_size,
& Nbsp; date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime)),
)
# Memperbarui dokumen indeks
doc = MyIndex.objects.get (pk = 1)
doc.content = fulltext.get (jalan, '')
doc.size = st.st_size
doc.date = time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (st.st_mtime))
doc.save ()
Anda dapat melakukan query teks lengkap menggunakan operator pencarian Django. Baca dokumentasi Django untuk informasi lebih lanjut.
MyIndex.objects.filter (content__search = 'foobar')
Query melewati langsung ke Sphinx, sehingga sintaks query diperpanjang Sphinx dihormati.
Unit Testing
Sphinx backend untuk Django akan mengabaikan create_test_db dan destroy_test_db panggilan. Panggilan ini akan gagal jika database Sphinx dikonfigurasi, mencegah Anda dari tes berjalan. Namun, ini berarti bahwa database Sphinx dikonfigurasi akan digunakan selama pengujian. Selama Anda menulis tes Anda dengan pemikiran ini, seharusnya tidak ada masalah. . Ingat bahwa Anda dapat menggunakan parameter koneksi database TEST_NAME untuk mengarahkan pertanyaan untuk koneksi database yang berbeda selama tes berjalan
Persyaratan :
- Python
- Django
Komentar tidak ditemukan