Saya sedang membangun situs Django dan saya sedang mencari mesin pencari.
Beberapa kandidat:
Lucene / Lucene dengan Kompas / Solr
Sphinx
Pencarian teks lengkap bawaan Postgresql
Pencarian teks lengkap bawaan MySQl
Kriteria pemilihan:
- relevansi dan peringkat hasil
- kecepatan pencarian dan pengindeksan
- kemudahan penggunaan dan kemudahan integrasi dengan Django
- persyaratan sumber daya - situs akan di-host pada VPS , jadi idealnya mesin pencari tidak memerlukan banyak RAM dan CPU
- skalabilitas
- fitur tambahan seperti "maksud Anda?", pencarian terkait, dll
Siapa pun yang memiliki pengalaman dengan mesin pencari di atas, atau mesin lain yang tidak ada dalam daftar - Saya akan senang mendengar pendapat Anda.
EDIT: Mengenai kebutuhan pengindeksan, karena pengguna terus memasukkan data ke dalam situs, data tersebut perlu diindeks secara terus menerus. Tidak harus real time, tetapi idealnya data baru akan muncul dalam indeks dengan penundaan tidak lebih dari 15 - 30 menit
mysql
postgresql
full-text-search
lucene
sphinx
Kelanjutan
sumber
sumber
Tsearch
tidak mendukung pencarian frase. Namun, itu ada di daftar TODO sai.msu.su/~megera/wiki/FTS_Todo .Jawaban:
Senang melihat seseorang menimpali tentang Lucene - karena saya tidak tahu tentang itu.
Sphinx, di sisi lain, saya tahu betul, jadi mari kita lihat apakah saya bisa membantu.
Saya tidak tahu bagaimana ini berlaku untuk situasi Anda, tetapi Evan Weaver membandingkan beberapa opsi pencarian Rails yang umum (Sphinx, Ferret (pelabuhan Lucene untuk Ruby) dan Solr), menjalankan beberapa tolok ukur. Bisa bermanfaat, kurasa.
Saya belum menyelami kedalaman pencarian teks lengkap MySQL, tetapi saya tahu itu tidak bersaing dengan kecepatan maupun fitur dengan Sphinx, Lucene atau Solr.
sumber
Saya tidak tahu Sphinx, tetapi untuk Lucene vs database pencarian teks lengkap, saya pikir kinerja Lucene tak tertandingi. Anda harus dapat melakukan hampir semua pencarian dalam waktu kurang dari 10 ms, tidak peduli berapa banyak catatan yang harus Anda cari, asalkan Anda telah mengatur indeks Lucene Anda dengan benar.
Inilah rintangan terbesarnya: secara pribadi, saya pikir mengintegrasikan Lucene dalam proyek Anda tidak mudah . Tentu, tidak terlalu sulit untuk mengaturnya sehingga Anda dapat melakukan pencarian dasar, tetapi jika Anda ingin mendapatkan yang terbaik dari itu, dengan kinerja yang optimal, maka Anda pasti membutuhkan buku yang bagus tentang Lucene.
Mengenai persyaratan CPU & RAM, melakukan pencarian di Lucene tidak terlalu membebani CPU Anda, meskipun mengindeks data Anda, meskipun Anda tidak melakukannya terlalu sering (mungkin sekali atau dua kali sehari), sehingga tidak banyak rintangan.
Itu tidak menjawab semua pertanyaan Anda, tetapi singkatnya, jika Anda memiliki banyak data untuk dicari, dan Anda ingin kinerja yang hebat, maka saya pikir Lucene pasti cara yang harus dilakukan. Jika Anda tidak akan memiliki banyak data untuk dicari, maka Anda sebaiknya pergi untuk pencarian teks lengkap database. Menyiapkan pencarian teks lengkap MySQL jelas lebih mudah di buku saya.
sumber
Saya terkejut bahwa tidak ada lebih banyak informasi yang diposting tentang Solr. Solr sangat mirip dengan Sphinx tetapi memiliki fitur yang lebih canggih (AFAIK karena saya belum pernah menggunakan Sphinx - hanya membacanya).
Jawaban di tautan di bawah merinci beberapa hal tentang Sphinx yang juga berlaku untuk Solr. Perbandingan mesin pencari teks lengkap - Lucene, Sphinx, Postgresql, MySQL?
Solr juga menyediakan fitur tambahan berikut:
BTW, ada banyak fitur lainnya; namun, saya telah mencantumkan hanya fitur yang sebenarnya telah saya gunakan dalam produksi. BTW, di luar kotak, MySQL mendukung # 1, # 3, dan # 11 (terbatas) pada daftar di atas. Untuk fitur yang Anda cari, basis data relasional tidak akan memotongnya. Saya akan langsung menghilangkannya.
Juga, manfaat lain adalah bahwa Solr (well, Lucene sebenarnya) adalah database dokumen (misalnya NoSQL) sehingga banyak manfaat dari database dokumen lain dapat direalisasikan dengan Solr. Dengan kata lain, Anda dapat menggunakannya untuk lebih dari sekedar pencarian (yaitu Kinerja). Berkreasilah dengan itu :)
sumber
Apache Solr
Selain menjawab pertanyaan OP, Izinkan saya memberikan wawasan tentang Apache Solr dari pengantar sederhana hingga instalasi dan implementasi terperinci .
Solr seharusnya tidak digunakan untuk memecahkan masalah real-time. Untuk mesin pencari, Solr cukup banyak permainan dan bekerja dengan sempurna .
Solr berfungsi dengan baik di aplikasi web Lalu Lintas Tinggi ( saya membaca bahwa itu tidak cocok untuk ini, tapi saya mendukung pernyataan itu ). Ini menggunakan RAM, bukan CPU.
The dorongan membantu Anda peringkat hasil Anda muncul di atas. Katakanlah, Anda mencoba untuk mencari nama john di bidang firstname dan lastname , dan Anda ingin memberikan relevansi ke firstname lapangan, maka Anda perlu untuk meningkatkan atas firstname lapangan seperti yang ditunjukkan.
Seperti yang Anda lihat, bidang nama depan dinaikkan dengan skor 2.
Lebih lanjut tentang SolrRelevancy
Kecepatannya luar biasa cepat dan tidak ada kompromi untuk itu. Alasan saya pindah ke Solr .
Mengenai kecepatan pengindeksan, Solr juga dapat menangani GABUNGAN dari tabel database Anda. GABUNG yang lebih tinggi dan kompleks memang memengaruhi kecepatan pengindeksan. Namun, konfigurasi RAM yang sangat besar dapat dengan mudah mengatasi situasi ini.
Semakin tinggi RAM, semakin cepat kecepatan pengindeksan Solr.
Tidak pernah mencoba mengintegrasikan Solr dan Django , namun Anda dapat melakukannya dengan Haystack . Saya menemukan beberapa artikel menarik tentang hal yang sama dan inilah github untuknya.
Solr berkembang biak di RAM, jadi jika RAM tinggi, Anda tidak perlu khawatir tentang Solr .
Penggunaan RAM Solr meningkat pada pengindeksan penuh jika Anda memiliki beberapa miliar catatan, Anda dapat dengan cerdas memanfaatkan impor Delta untuk mengatasi situasi ini. Sebagaimana dijelaskan, Solr hanya merupakan solusi waktu dekat yang dekat .
Solr sangat scalable. Lihat SolrCloud . Beberapa fitur utama darinya.
Untuk skenario di atas, Anda bisa menggunakan SpellCheckComponent yang dipaket dengan Solr . Ada banyak fitur lain, The SnowballPorterFilterFactory membantu untuk mengambil catatan mengatakan jika Anda mengetik, buku , bukan buku , Anda akan disajikan dengan hasil yang berkaitan dengan buku .
Jawaban ini secara luas berfokus pada Apache Solr & MySQL . Django berada di luar jangkauan.
Dengan asumsi bahwa Anda berada di bawah lingkungan LINUX, Anda dapat melanjutkan ke artikel ini lebih lanjut. (milik saya adalah versi Ubuntu 14.04)
Mulai
Unduh Apache Solr dari sini . Itu akan menjadi versi 4.8.1 . Anda dapat mengunduh versi baru, saya menemukan ini stabil.
Setelah mengunduh arsip, ekstrak ke folder pilihan Anda. Katakan ..
Downloads
atau apa pun .. Jadi akan terlihat sepertiDownloads/solr-4.8.1/
Saat diminta .. Arahkan ke dalam direktori
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Jadi sekarang kamu di sini ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Mulai Server Aplikasi Jetty
Jetty tersedia di dalam folder contoh
solr-4.8.1
direktori, jadi navigasi di dalamnya dan mulai Jetty Application Server.shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Sekarang, jangan tutup terminal, kecilkan dan biarkan di samping.
Untuk memeriksa apakah Apache Solr berjalan dengan sukses, kunjungi URL ini di browser. http: // localhost: 8983 / solr
Menjalankan Jetty di Port khusus
Ini berjalan pada port 8983 sebagai default. Anda dapat mengubah porta di sini atau langsung di dalam
jetty.xml
file.java -Djetty.port=9091 -jar start.jar
Unduh JConnector
File JAR ini bertindak sebagai jembatan antara MySQL dan JDBC, Unduh Platform Independent Version di sini
Setelah mengunduhnya, ekstrak folder dan salin
mysql-connector-java-5.1.31-bin.jar
dan tempel ke direktori lib .shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Membuat tabel MySQL untuk ditautkan ke Apache Solr
Untuk menggunakan Solr , Anda harus memiliki beberapa tabel dan data untuk dicari. Untuk itu, kita akan menggunakan MySQL untuk membuat tabel dan mendorong beberapa nama acak dan kemudian kita bisa menggunakan Solr untuk terhubung ke MySQL dan mengindeks tabel itu dan entri itu.
1. Struktur Tabel
2.Populasikan tabel di atas
Masuk ke dalam inti dan menambahkan arahan lib
1.Navigasi ke
2.Memodifikasi solrconfig.xml
Tambahkan dua arahan ini ke file ini ..
Sekarang tambahkan DIH (Pengimpor Impor Data)
3.Buat file db-data-config.xml
Jika file ada maka abaikan, tambahkan baris ini ke file itu. Seperti yang Anda lihat pada baris pertama, Anda perlu memberikan kredensial dari database MySQL Anda . Nama Database, nama pengguna, dan kata sandi.
4.Modifikasi file schema.xml
Tambahkan ini ke schema.xml Anda seperti yang ditunjukkan ..
Pengindeksan
Di sinilah real dealnya. Anda perlu melakukan pengindeksan data dari MySQL ke Solr inorder untuk menggunakan Solr Queries.
Langkah 1: Buka Panel Admin Solr
Memukul URL http: // localhost: 8983 / solr pada browser Anda. Layar terbuka seperti ini.
Seperti yang ditunjukkan penanda, buka Log inorder untuk memeriksa apakah ada konfigurasi di atas yang menyebabkan kesalahan.
Langkah 2: Periksa Log Anda
Ok jadi sekarang Anda di sini, Karena Anda bisa ada banyak pesan kuning (PERINGATAN). Pastikan Anda tidak memiliki pesan kesalahan yang ditandai dengan warna merah. Sebelumnya, pada konfigurasi kami, kami telah menambahkan permintaan pilih pada db-data-config.xml kami , katakan jika ada kesalahan pada permintaan itu, itu akan ditampilkan di sini.
Baik, tidak ada kesalahan. Kami baik untuk pergi. Mari kita pilih collection1 dari daftar seperti yang digambarkan dan pilih Impor Data
Langkah 3: DIH (Penangan Impor Data)
Menggunakan DIH, Anda akan terhubung ke MySQL dari Solr melalui file konfigurasi db-data-config.xml dari antarmuka Solr dan mengambil 10 catatan dari database yang akan diindeks ke Solr .
Untuk melakukan itu, Pilih impor penuh , dan periksa opsi Bersihkan dan Komit . Sekarang klik Jalankan seperti yang ditunjukkan.
Atau, Anda juga dapat menggunakan kueri impor penuh langsung seperti ini ..
Setelah Anda mengklik Jalankan , Solr mulai mengindeks catatan, jika ada kesalahan, itu akan mengatakan Pengindeksan Gagal dan Anda harus kembali ke bagian Logging untuk melihat apa yang salah.
Dengan asumsi tidak ada kesalahan dengan konfigurasi ini dan jika pengindeksan berhasil diselesaikan., Anda akan mendapatkan pemberitahuan ini.
Langkah 4: Menjalankan Solr Queries
Sepertinya semuanya berjalan dengan baik, sekarang Anda bisa menggunakan Solr Queries untuk meminta data yang diindeks. Klik Query di sebelah kiri dan kemudian tekan tombol Execute di bagian bawah.
Anda akan melihat catatan yang diindeks seperti yang ditunjukkan.
Permintaan Solr yang sesuai untuk daftar semua catatan adalah
Nah, ada semua 10 catatan yang diindeks. Katakanlah, kita hanya perlu nama yang dimulai dengan Ja , dalam hal ini, Anda perlu menargetkan nama kolom
solr_name
, Oleh karena itu permintaan Anda seperti ini.Begitulah cara Anda menulis Solr Queries. Untuk membaca lebih lanjut tentang itu, Periksa artikel yang indah ini .
sumber
Saya sedang mencari pencarian teks lengkap PostgreSQL sekarang, dan ia memiliki semua fitur yang tepat dari mesin pencari modern, karakter tambahan yang sangat bagus dan dukungan multibahasa, integrasi ketat yang bagus dengan bidang teks dalam database.
Tetapi tidak memiliki operator pencarian yang ramah pengguna seperti + atau AND (menggunakan & |!) Dan saya tidak senang dengan cara kerjanya di situs dokumentasi mereka. Meskipun memiliki huruf besar yang cocok dalam cuplikan hasil, algoritme default yang untuk kata kunci tidak bagus. Juga, jika Anda ingin mengindeks rtf, PDF, MS Office, Anda harus menemukan dan mengintegrasikan konverter format file.
OTOH, ini jauh lebih baik daripada pencarian teks MySQL, yang bahkan tidak mengindeks kata-kata dari tiga huruf atau kurang. Ini adalah default untuk pencarian MediaWiki, dan saya pikir itu tidak baik untuk pengguna akhir: http://www.searchtools.com/analysis/mediawiki-search/
Dalam semua kasus yang pernah saya lihat, Lucene / Solr dan Sphinx benar-benar hebat . Mereka adalah kode yang solid dan telah berevolusi dengan peningkatan yang signifikan dalam kegunaan, jadi alat-alatnya ada di sana untuk melakukan pencarian yang memuaskan hampir semua orang.
untuk SHAILI - SOLR menyertakan perpustakaan kode pencarian Lucene dan memiliki komponen-komponen untuk menjadi mesin pencari mandiri yang bagus.
sumber
Tsearch
. Tetapi Tsearch tidak mendukung pencarian frase. Itu masih ada di daftar TODO mereka sai.msu.su/~megera/wiki/FTS_Todo .Hanya dua sen saya untuk pertanyaan yang sangat lama ini. Saya sangat merekomendasikan untuk melihat ElasticSearch .
Keuntungan dibandingkan dengan FTS lainnya (pencarian teks lengkap) Mesin adalah:
Kami menggunakan mesin pencari ini di proyek kami dan sangat senang dengannya.
sumber
SearchTools-Avi mengatakan "Pencarian teks MySQL, yang bahkan tidak mengindeks kata-kata dari tiga huruf atau kurang."
FYIs, MySQL fulltext min word length dapat disesuaikan sejak setidaknya MySQL 5.0. Google 'mysql fulltext min length' untuk instruksi sederhana.
Yang mengatakan, MySQL fulltext memiliki keterbatasan: untuk satu, itu lambat untuk memperbarui setelah Anda mencapai satu juta catatan, ...
sumber
Saya akan menambahkan mnoGoSearch ke daftar. Solusi yang sangat berkinerja dan fleksibel, yang berfungsi sebagai Google: pengindeks mengambil data dari banyak situs, Anda dapat menggunakan kriteria dasar, atau menemukan kait Anda sendiri untuk memiliki kualitas pencarian maksimal. Juga bisa mengambil data langsung dari database.
Solusinya tidak begitu dikenal hari ini, tetapi ia memenuhi kebutuhan maksimum. Anda dapat mengkompilasi dan menginstalnya atau di server mandiri, atau bahkan di server utama Anda, itu tidak membutuhkan sumber daya yang begitu banyak seperti Solr, karena ditulis dalam C dan berjalan dengan sempurna bahkan pada server kecil.
Pada awalnya Anda perlu mengkompilasinya sendiri, sehingga membutuhkan beberapa pengetahuan. Saya membuat naskah kecil untuk Debian, yang bisa membantu. Setiap penyesuaian dipersilakan.
Ketika Anda menggunakan kerangka Django, Anda bisa menggunakan atau klien PHP di tengah, atau menemukan solusi dengan Python, saya melihat beberapa artikel .
Dan, tentu saja mnoGoSearch adalah open source, GNU GPL.
sumber