Django + Haystack Search With Whoosh Engine
Untuk memberikan fasilitas pencarian di website, cara yang paling mudah adalah dengan mencarinya langsung ke dalam database. Namun hal ini membutuhkan `usaha` yang cukup besar apalagi jika isi tabelnya banyak.
Ya…! Anda bisa optimize table di database dengan index dan lain2x, namun jika cukup banyak model konten yang hendak di indeks, cukup merepotkan juga kan
Okeh, mari kita mulai…
Pertama silakan lihat-lihat dulu halaman manual dari haystacksearch[1].
haystacksearch mendukung beberapa ENGINE searching, namun untuk alasan kemudahan instalasi, saya menggunakan Whoosh[2]
Kemudian kita install haystacksearch dan whoosh, pake easy_install aja biar mudah
Lalu buka berkas settings.py dan tambahkan
Buat file search_sites.py lalu isikan:
Buat folder untuk berkas indeks sesuai dengan HAYSTACK_WHOOSH_PATH
Langkah selanjutnya adalah membuat berkas search_indexes.py di setiap application yang akan kita indeks, kemudian isikan kira2x begini
Dengan opsi use_template=True Selanjutnya kita membuat berkas template namamodelya_text.txt di [folder_templates]/search/indexes/[nama_aplikasi]/namamodelya_text.txt, Masukkan field-field yang mau di indeks ke dalam template ituh :-)
Ulangi membuat berkas search_indexes.py beserta templatenya untuk model dan aplikasi yang lainnya.
Langkah konfigurasi terakhir adalah menyunting berkas url.py dan membuat template untuk halaman searching, keduanya ada di dokumentasinya[1], silakan copas saja ^_^
Terakhir, namun bukan yang paling akhir, bikin indeks pencarian.
Dan akhirnya yang paling akhir adalah membuat cron job yang akan mengeksekusi
!Demikian.
[1] http://docs.haystacksearch.org/dev/tutorial.html
[2] http://whoosh.ca/
[3]http://www.djangoproject.com/
*yang [dikotakin] yang diubah.
Ya…! Anda bisa optimize table di database dengan index dan lain2x, namun jika cukup banyak model konten yang hendak di indeks, cukup merepotkan juga kan
Okeh, mari kita mulai…
Pertama silakan lihat-lihat dulu halaman manual dari haystacksearch[1].
haystacksearch mendukung beberapa ENGINE searching, namun untuk alasan kemudahan instalasi, saya menggunakan Whoosh[2]
Kemudian kita install haystacksearch dan whoosh, pake easy_install aja biar mudah
# easy_install django-haystack
# easy_install whoosh Lalu buka berkas settings.py dan tambahkan
INSTALLED_APPS = (
…
'haystack',
…
)
HAYSTACK_SITECONF = 'aplikasimu.search_sites'
HAYSTACK_SEARCH_ENGINE = 'whoosh'
HAYSTACK_WHOOSH_PATH = '/folder/untuk/search_index'
Buat file search_sites.py lalu isikan:
import haystack
haystack.autodiscover()
Buat folder untuk berkas indeks sesuai dengan HAYSTACK_WHOOSH_PATH
Langkah selanjutnya adalah membuat berkas search_indexes.py di setiap application yang akan kita indeks, kemudian isikan kira2x begini
import datetime
from haystack.indexes import *
from haystack import site
from [aplikasinya].models import [NamaModelnya]
class [NamaModelnyaIndex](SearchIndex):
text = CharField(document=True, use_template=True)
author = CharField(model_attr='[field_author]')
pub_date = DateTimeField(model_attr='[field_tanggal]')
def get_queryset(self):
"""Used when the entire index for model is updated."""
return [NamaModelnya].objects.filter([field_tanggal]__lte=datetime.datetime.now())
site.register([NamaModelnya], [NamaModelnyaIndex])
Dengan opsi use_template=True Selanjutnya kita membuat berkas template namamodelya_text.txt di [folder_templates]/search/indexes/[nama_aplikasi]/namamodelya_text.txt, Masukkan field-field yang mau di indeks ke dalam template ituh :-)
{{ object.keywords }}
{{ object.judul }}
{{ object.author.get_full_name }}
{{ object.teks }}
Ulangi membuat berkas search_indexes.py beserta templatenya untuk model dan aplikasi yang lainnya.
Langkah konfigurasi terakhir adalah menyunting berkas url.py dan membuat template untuk halaman searching, keduanya ada di dokumentasinya[1], silakan copas saja ^_^
Terakhir, namun bukan yang paling akhir, bikin indeks pencarian.
# python manage.py rebuild_index
Dan akhirnya yang paling akhir adalah membuat cron job yang akan mengeksekusi
# python manage.py update_index
!Demikian.
[1] http://docs.haystacksearch.org/dev/tutorial.html
[2] http://whoosh.ca/
[3]http://www.djangoproject.com/
*yang [dikotakin] yang diubah.
Komentar
Posting Komentar