Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Django

Cara Mengindeks dan Kueri Data dengan Haystack dan Elasticsearch di Python

by
Length:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Haystack

Haystack adalah perpustakaan Python yang menyediakan pencarian modular untuk Django. Ini memiliki fitur API yang menyediakan dukungan untuk back end pencarian yang berbeda seperti Elasticsearch, Whoosh, Xapian, dan Solr.

Elasticsearch

Elasticsearch adalah mesin pencari Lucene populer yang mampu mencari teks lengkap, dan dikembangkan di Java.

Pencarian Google menggunakan pendekatan yang sama untuk mengindeks data mereka, dan itulah mengapa sangat mudah untuk mengambil informasi hanya dengan beberapa kata kunci, seperti yang ditunjukkan di bawah ini.

Elastic Search and Google

Elastic Search dan GoogleInstal Django Haystack dan Elasticsearch

Langkah pertama adalah membuat Elasticsearch aktif dan berjalan secara lokal di komputer Anda. Elasticsearch membutuhkan Java, jadi Anda perlu menginstal Java di mesin Anda.

Kita akan mengikuti instruksi dari situs Elasticsearch.

Unduh tar Elasticsearch 1.4.5 sebagai berikut:

Ekstrak sebagai berikut:

Ini kemudian akan membuat batch file dan folder di direktori Anda saat ini. Kita kemudian masuk ke direktori bin sebagai berikut:

Mulai Elasticsearch sebagai berikut.

Untuk mengonfirmasi apakah telah berhasil dipasang, buka http://127.0.0.1:9200/, dan Anda akan melihat sesuatu seperti ini.

Pastikan Anda juga memiliki haystack yang terinstal.

Mari kita buat proyek Django kita. Proyek kita akan dapat mengindeks semua pelanggan di bank, membuatnya mudah untuk mencari dan mengambil data hanya dengan menggunakan beberapa istilah pencarian.

Perintah ini membuat file yang menyediakan konfigurasi untuk proyek Django.

Mari buat aplikasi untuk pelanggan.

Konfigurasi settings.py

Untuk menggunakan Elasticsearch agar mengindeks konten yang dapat ditelusuri, kita perlu menentukan pengaturan back-end untuk haystack di file settings.py proyek kita. Kita akan menggunakan Elasticsearch sebagai back end kita.

HAYSTACK_CONNECTIONS adalah pengaturan yang diperlukan dan harus terlihat seperti ini:

Di dalam settings.py, kita juga akan menambahkan haystack dan pelanggan ke daftar installed apps.

Membuat Model

Mari membuat model untuk Customers. Di customers/models.py, tambahkan kode berikut.

Daftarkan model Customer Anda di admin.py seperti ini:

Membuat Database dan Super User

Terapkan migrasi Anda dan buat akun admin.

Jalankan server Anda dan arahkan ke http://localhost:8000/admin/. Anda sekarang harus dapat melihat model Customer Anda di sana. Lanjutkan dan tambahkan pelanggan baru di admin.

Mengindeks Data

Untuk mengindeks model kita, kita mulai dengan membuat SearchIndex. Obyek SearchIndex menentukan data apa yang harus ditempatkan dalam indeks pencarian. Setiap jenis model harus memiliki searchIndex yang unik.

Obyek SearchIndex adalah cara haystack menentukan data apa yang harus ditempatkan dalam indeks pencarian dan menangani aliran data. Untuk membangun SearchIndex, kita akan mewarisi dari indexes.SearchIndex dan indexes.Indexable, mendefinisikan field yang kita ingin menyimpan data kita, dan mendefinisikan metode get_model.

Mari kita buat CustomerIndex agar sesuai dengan pemodelan Customer kita. Buat file search_indexes.py di direktori aplikasi customers, dan tambahkan kode berikut.

EdgeNgramField adalah bidang di SearchIndex haystack yang mencegah pencocokan yang salah ketika bagian dari dua kata berbeda digabungkan bersama.

Ini memungkinkan kita menggunakan fitur autocomplete untuk melakukan kueri. Kita akan menggunakan autocomplete ketika kita mulai mengkueri data kita.

document=True menunjukkan bidang utama untuk mencari di dalamnya. Selain itu, use_template=True di bidang text memungkinkan kita untuk menggunakan template data untuk membuat dokumen yang akan diindeks.

Mari membuat template di dalam direktori template customers kita. Di dalam search/indexes/customers/customers_text.txt, tambahkan yang berikut:

Reindeks Data

Sekarang data kita di dalam database, saatnya untuk memasukkannya ke dalam indeks pencarian kita. Untuk melakukan ini, cukup jalankan ./manage.py rebuild_index. Anda akan mendapatkan total berapa banyak model yang diproses dan ditempatkan dalam indeks.

Atau, Anda dapat menggunakan RealtimeSignalProcessor, yang secara otomatis menangani pembaruan/penghapusan untuk Anda. Untuk menggunakannya, tambahkan yang berikut di file settings.py.

Kueri Data

Kita akan menggunakan template pencarian dan API Haystack untuk melakukan kueri data.

Template Pencarian

Tambahkan url haystack ke URLconf Anda.

Mari buat template pencarian kita. Di templates/search.html, tambahkan kode berikut.

The page.object_list adalah daftar obyek SearchResult yang memungkinkan kita untuk mendapatkan obyek model individu, misalnya, result.first_name.

Struktur proyek lengkap Anda akan terlihat seperti ini:

The project directory structure

Sekarang jalankan server, pergi ke 127.0.0.1:8000/search/, dan lakukan pencarian seperti yang ditunjukkan di bawah ini.

Running a search on a local server

Pencarian Albert akan memberikan hasil semua pelanggan dengan nama Albert. Jika tidak ada pelanggan yang memiliki nama Albert, maka permintaan akan memberikan hasil yang kosong. Jangan ragu untuk bermain-main dengan data Anda sendiri.

API Haystack

Haystack memiliki kelas SearchQuerySet yang dirancang untuk membuatnya mudah dan konsisten untuk melakukan pencarian dan mengulangi hasil. Sebagian besar API SearchQuerySet akrab dengan ORS QuerySet dari Django.

Di customers/views.py, tambahkan kode berikut:

autocomplete adalah metode pintasan untuk melakukan pencarian autocomplete. Ini harus dijalankan terhadap bidang baik EdgeNgramField atau NgramField.

Di Queryset di atas, kita menggunakan metode contains untuk memfilter pencarian kita untuk mengambil hanya hasil yang berisi karakter yang kita tetapkan. Misalnya, Al hanya akan mengambil rincian pelanggan yang berisi Al. Perhatikan bahwa hasil hanya akan berasal dari bidang yang telah ditentukan dalam file customer_text.txt.

The results of a query

Selain contains Field Lookup, ada bidang lain yang tersedia untuk melakukan kueri, termasuk:

  • content
  • contains
  • exact
  • gt
  • gte
  • lt
  • lte
  • in
  • startswith
  • endswith
  • range
  • fuzzy

Kesimpulan

Sejumlah besar data dihasilkan pada saat tertentu di media sosial, kesehatan, belanja, dan sektor lainnya. Sebagian besar data ini tidak terstruktur dan tersebar. Elasticsearch dapat digunakan untuk mengolah dan menganalisis data ini menjadi bentuk yang dapat dipahami dan dikonsumsi.

Elasticsearch juga telah digunakan secara luas untuk pencarian konten, analisis data, dan pertanyaan. Untuk informasi lebih lanjut, kunjungi situs Haystack dan Elasticsearch.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.