Implementasi mesin pencari sederhana.
Tujuan studi, sebagian besar untuk memahami rincian implementasi tentang bagaimana mesin pencari dibuat, trade-off kinerja dan strukturnya.
Idenya adalah membuat aplikasi isomorfik dari UI ke sistem database.
Aplikasi dapat disebarkan menggunakan buruh pelabuhan atau biner yang dirilis di github.
./searchzin -c <path-to-config>.yml
Setelah itu Anda bisa melihat ke http://localhost:8080
untuk melihat halaman pencarian.
Konfigurasi dapat dilakukan dengan file konfigurasi yang secara default terletak di /etc/searchzin/config.yml
, atau dengan menyediakan kunci konfigurasi dalam bentuk -C key=value
, bentuk kedua menggantikan yang pertama.
Default konfigurasi:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
Semua struktur proyek dibuat di golang, menggunakan kerangka gin
.
Dependensi dikelola menggunakan dep
.
Sebagian besar rantai alat proyek dikelola oleh Makefile
, target pentingnya adalah:
install
: Instal dependensi yang diperlukan dan git hooksreadme
: Melakukan penyertaan file README.md
lint
: Melakukan linting dan memformat kodetest
: Ya, kompilasi dan jalankan pengujian unitbuild
: Membuat folder distribusi linux
di dist
run
: Menjalankan kode menggunakan go run
run-dev
: Membuat dan menjalankan kontainer buruh pelabuhanrelease
: Membuat gambar buruh pelabuhan rilispublish
: Menerbitkan gambar buruh pelabuhan di dockerhub menggunakan konten file VERSION
sebagai versinyapublish-latest
: Memublikasikan gambar buruh pelabuhan di dockerhub dengan tag latest
watch
: Melakukan lint
dan test
modifikasi filefunc-test
: Melakukan tes fungsional di dalam folder features
Ada 6 komponen utama mesin pencari ini:
Setiap komponen memiliki tanggung jawab yang jelas dalam sistem, dan semuanya bekerja sama untuk merespons pertanyaan dan permintaan pengindeksan dokumen.
Bertanggung jawab untuk menyimpan dan memberikan id pada dokumen yang baru dibuat. Kendalanya adalah:
id
merekaid
tanpa tabrakan untuk persistensissd
atau hdd
Menyimpan indeks terbalik dari "istilah" dan dokumen
terms
untuk mendokumentasikan relasi himpunankey
untuk kueri dengan perkiraan kata kunciMengingat dokumen baru memahaminya dan menyimpannya di database indeks dan database dokumen.
Mengurai masukan pengguna dan mengubahnya menjadi rencana kueri menggunakan struktur data seperti pohon.
lucene
Dengan adanya pohon kueri, optimalkan dengan memperhatikan batasan dan lingkungan di mana ia akan dieksekusi.
Setelah memiliki rencana terstruktur query kemudian mengambil data efektif dari database index
, langkah ini dilakukan oleh pelaksana.
Bahasa kueri ini sangat didasarkan pada lucene, untuk menyederhanakan desain dan memahami pengorbanan yang dilakukan.
Skenario pengujian saat ini yang akan digunakan adalah mengindeks podcast berdasarkan nama, konten, dan tag.
Penggunaan dasar dapat ditemukan di searchzin-example
.
searchzin tersedia di bawah lisensi MIT.