Perbandingan mesin pencarian teks lengkap - Lucene, Sphinx, Postgresql, MySQL?

312

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

Kelanjutan
sumber
26
2 ¢: Pencarian dan transaksi fulltext MySQL (saat ini) saling eksklusif. Indeks fulltext MySQL memerlukan jenis tabel MyISAM, yang tidak mendukung transaksi. (Berbeda dengan jenis tabel InnoDB yang mendukung transaksi, tetapi bukan indeks teks lengkap.)
Carl G
2
Pencarian teks lengkap PostgreSQL, Tsearch tidak mendukung pencarian frase. Namun, itu ada di daftar TODO sai.msu.su/~megera/wiki/FTS_Todo .
Gnanam
1
Siapa pun yang melihat ini untuk Django harus memeriksa aplikasi tumpukan jerami. haystacksearch.org
Keyo
24
@ CarlG, Hanya untuk referensi semua orang. MySQL 5.6+ memiliki dukungan pencarian teks lengkap dengan mesin
innodb

Jawaban:

167

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.

  • Peringkat relevansi hasil adalah default. Anda dapat mengatur penyortiran Anda sendiri jika Anda inginkan, dan memberikan bobot bidang tertentu lebih tinggi.
  • Kecepatan pengindeksan sangat cepat, karena berbicara langsung ke database. Setiap kelambatan akan datang dari query SQL yang kompleks dan kunci asing yang tidak diindeks dan masalah lainnya. Saya tidak pernah melihat ada kelambatan dalam mencari.
  • Saya seorang pria Rails, jadi saya tidak tahu betapa mudahnya untuk mengimplementasikannya dengan Django. Ada API Python yang datang dengan sumber Sphinx.
  • Daemon layanan pencarian (searchd) cukup rendah dalam penggunaan memori - dan Anda dapat menetapkan batas pada berapa banyak memori yang digunakan proses pengindeks juga.
  • Skalabilitas adalah tempat pengetahuan saya lebih samar - tetapi cukup mudah untuk menyalin file indeks ke beberapa mesin dan menjalankan beberapa daemon pencarian. Kesan umum yang saya dapatkan dari orang lain adalah bahwa itu sangat bagus di bawah beban tinggi, jadi meningkatkannya di beberapa mesin bukanlah sesuatu yang perlu ditangani.
  • Tidak ada dukungan untuk 'apa yang Anda maksudkan', dll - meskipun ini dapat dilakukan dengan alat lain dengan cukup mudah. Sphinx memang membendung kata-kata meskipun menggunakan kamus, jadi 'mengemudi' dan 'mengemudi' (misalnya) akan dianggap sama dalam pencarian.
  • Sphinx tidak mengizinkan pembaruan indeks parsial untuk data lapangan. Pendekatan umum untuk ini adalah mempertahankan indeks delta dengan semua perubahan terbaru, dan mengindeks ulang ini setelah setiap perubahan (dan hasil baru tersebut muncul dalam satu atau dua detik). Karena jumlah data yang kecil, ini bisa memakan waktu beberapa detik. Anda masih perlu mengindeks ulang dataset utama secara teratur (meskipun seberapa sering tergantung pada volatilitas data Anda - setiap hari? Setiap jam?). Kecepatan pengindeksan cepat menjaga ini semua cukup menyakitkan.

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.

menepuk
sumber
Sphinx memungkinkan Anda untuk memperbarui masing-masing atribut item dalam indeks saat ini, tetapi tidak menghapus / memperbarui catatan lengkap.
Xorlev
sphinx RT memungkinkan Anda melakukan pembaruan / pemindahan sebagian. ini masih dalam tahap awal tetapi sudah hampir berhasil. sphinxsearch.com/wiki/doku.php?id=rt_tutorial
pQd
4
Berikut ini jawaban Solr yang merupakan pasangan yang baik untuk jawaban ini di Sphinx
New Alexandria
Tidak ada yang bisa menandingi Sphinx untuk kecepatan, jadi jika kecepatan menjadi perhatian utama Anda, maka Sphinx adalah pilihan yang tepat. Posting yang bagus
twigg
Sphinx 2.3.2 Beta sekarang memiliki fitur yang disebut 'CALL SUGGEST' yang dapat digunakan untuk mengimplementasikan 'maksud Anda?' sphinxsearch.com/docs/devel.html#sphinxql-call-suggest
Vinod K
82

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.

Razzie
sumber
10
Dibandingkan dengan sphinx, lucence terlalu lambat dan besar. Saya telah menggunakan keduanya dalam proyek saya dan saya akhirnya bertahan dengan sphinx. Lucence ada di java, dan membutuhkan lebih banyak CPU dan RAM daripada Sphinx.
Phyo Arkar Lwin
25
Saya harus tidak setuju di sini. Lucene cepat kilat JIKA Anda membangun indeks yang benar. Anda pada dasarnya dapat melakukan kueri lanjutan atas jutaan catatan hanya dalam beberapa milidetik. Anda hanya perlu tahu apa yang Anda lakukan. Dan Lucene ada di java ... maksudmu? Ada juga .NET port, Lucene.NET btw.
Razzie
15
tetapi Anda dengan jelas menyatakan bahwa Anda tidak menggunakan sphinx, dan v3sson telah menggunakan keduanya.
user508546
20
bagaimana Anda dapat menyatakan bahwa kinerja lucene tidak tertandingi dalam kalimat yang sama dengan yang Anda nyatakan Anda belum pernah menggunakan sphinx?
user508546
22
Pertanyaan yang valid. Saya tidak pernah mengatakan bahwa Lucene lebih cepat daripada Sphinx, saya menyebutkan bahwa Lucene vs database pencarian teks lengkap tidak tertandingi. Dan itu. Tidak ada pertanyaan tentang itu. Lucene didasarkan pada indeks terbalik. Sekarang saya tidak tahu Sphinx, seperti yang disebutkan sebelumnya, tetapi jika itu juga menggunakan indeks terbalik atau metode pengindeksan yang sama maka mungkin mereka sama-sama berkinerja. Menyatakan bahwa Lucene, dibandingkan dengan Sphinx, akan 'terlalu lambat dan besar' tidak berdasarkan fakta. Terutama tidak ketika hanya mengatakan bahwa Lucene berada di 'Jawa', yang hanya merupakan masalah konyol dalam hal kinerja.
Razzie
60

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:

  1. Mendukung replikasi
  2. Multiple core (anggap ini sebagai database terpisah dengan konfigurasi dan indeks mereka sendiri)
  3. Pencarian Boolean
  4. Menyoroti kata kunci (cukup mudah dilakukan dalam kode aplikasi jika Anda memiliki regex-fu; namun, mengapa tidak membiarkan alat khusus melakukan pekerjaan yang lebih baik untuk Anda)
  5. Perbarui indeks melalui XML atau file yang dibatasi
  6. Berkomunikasi dengan server pencarian melalui HTTP (bahkan dapat mengembalikan Json, Native PHP / Ruby / Python)
  7. PDF, pengindeksan dokumen Word
  8. Bidang dinamis
  9. Segi
  10. Bidang agregat
  11. Hentikan kata, sinonim, dll.
  12. Lebih Seperti ini ...
  13. Mengindeks langsung dari database dengan kueri khusus
  14. Saran otomatis
  15. Pemuatan Otomatis Cache
  16. Pengindeksan cepat (bandingkan dengan waktu pengindeksan pencarian teks lengkap MySQL) - Lucene menggunakan format indeks terbalik biner.
  17. Peningkatan (aturan khusus untuk meningkatkan relevansi kata kunci atau frasa tertentu, dll.)
  18. Pencarian lapangan (jika pengguna pencarian tahu bidang yang ingin dia cari, mereka mempersempit pencarian mereka dengan mengetikkan bidang, maka nilainya, dan HANYA bidang yang dicari daripada semuanya - pengalaman pengguna yang jauh lebih baik)

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 :)

Wil Moore III
sumber
Sphinx juga tentang Mendukung replikasi Beberapa core Pencarian Boolean Menyoroti kata kunci Perbarui indeks melalui XML -atau file yang dibatasi- PDF, pengindeksan dokumen Word (melalui xml) Aspek Menghentikan kata, sinonim, dll. Mengindeks langsung dari database dengan kueri khusus Otomatis menyarankan Cepat pengindeksan Meningkatkan Pencarian yang dilakukan di bidang Tentang bidang Dinamis Bidang agregat Cache Autowarming Saya tidak tahu
Moosh
58

Apache Solr


Selain menjawab pertanyaan OP, Izinkan saya memberikan wawasan tentang Apache Solr dari pengantar sederhana hingga instalasi dan implementasi terperinci .

Pengantar sederhana


Siapa pun yang memiliki pengalaman dengan mesin pencari di atas, atau mesin lain yang tidak ada dalam daftar - Saya akan senang mendengar pendapat Anda.

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.

  • relevansi dan peringkat hasil

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.

http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john

Seperti yang Anda lihat, bidang nama depan dinaikkan dengan skor 2.

Lebih lanjut tentang SolrRelevancy

  • kecepatan pencarian dan pengindeksan

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.

  • kemudahan penggunaan dan kemudahan integrasi dengan Django

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.

  • persyaratan sumber daya - situs akan di-host pada VPS, jadi idealnya mesin pencari tidak memerlukan banyak RAM dan CPU

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 .

  • skalabilitas

Solr sangat scalable. Lihat SolrCloud . Beberapa fitur utama darinya.

  • Pecahan (atau pecahan adalah konsep mendistribusikan indeks di antara banyak mesin, katakan jika indeks Anda telah tumbuh terlalu besar)
  • Load Balancing (jika Solrj digunakan dengan Solr cloud secara otomatis menangani load-balancing menggunakan mekanisme Round-Robin)
  • Pencarian Terdistribusi
  • Ketersediaan Tinggi
  • fitur tambahan seperti "maksud Anda?", pencarian terkait, dll

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)

Instalasi Lengkap

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 .. Downloadsatau 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.1direktori, 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.

(TIP: Gunakan & setelah start.jar untuk membuat Jetty Server berjalan di latar belakang)

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.xmlfile.

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.jardan 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

CREATE TABLE test_solr_mysql
 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(45) NULL,
  created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
 );

2.Populasikan tabel di atas

INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');

Masuk ke dalam inti dan menambahkan arahan lib

1.Navigasi ke

shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf

2.Memodifikasi solrconfig.xml

Tambahkan dua arahan ini ke file ini ..

  <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />

Sekarang tambahkan DIH (Pengimpor Impor Data)

<requestHandler name="/dataimport" 
  class="org.apache.solr.handler.dataimport.DataImportHandler" >
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
</requestHandler>

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.

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
    <document>
   <entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
      OR `created` > '${dataimporter.last_index_time}'" >
    <field name="id" column="rid" />
    <field name="solr_name" column="name" />
    </entity>
   </document>
</dataConfig>

(TIP: Anda dapat memiliki sejumlah entitas tapi hati-hati dengan bidang id, jika mereka sama maka pengindeksan akan dilewati.)

4.Modifikasi file schema.xml

Tambahkan ini ke schema.xml Anda seperti yang ditunjukkan ..

<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />

Penerapan

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.

Ini adalah Panel Administrasi Apache Solr utama

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.

Ini adalah bagian logging dari mesin Apache Solr Anda

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 ..

http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

Penangan Impor Data

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.

Pengindeksan Sukses

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

http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

Data yang diindeks

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.

http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

Data JSON dimulai dengan Ja *

Begitulah cara Anda menulis Solr Queries. Untuk membaca lebih lanjut tentang itu, Periksa artikel yang indah ini .

Shankar Damodaran
sumber
3
@Downvoter, silakan komentar atau edit jawaban ini dan alasan untuk downvote akan membantu orang lain juga.
Shankar Damodaran
4
ini adalah salah satu posting paling komprehensif dan terorganisasi dengan baik yang pernah saya lihat di SO. Pekerjaan yang mengagumkan.
merosot
28

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.

SearchTools-Avi
sumber
1
Saya percaya bahwa dengan pencarian teks lengkap PostgreSQL yang Anda maksud Tsearch. Tetapi Tsearch tidak mendukung pencarian frase. Itu masih ada di daftar TODO mereka sai.msu.su/~megera/wiki/FTS_Todo .
Gnanam
1
Baru saja melakukan banyak pengujian pada pencarian teks lengkap Postgres 9.0; kecewa menemukan bahwa teks Prancis tidak cocok jika pengguna lupa untuk mendapatkan semua aksen yang benar. Pencocokan bentuk kata tidak merata - misalnya, dalam bahasa Inggris "katakan" tidak cocok dengan teks yang mengandung "kata". Secara keseluruhan cukup mengesankan meskipun untuk fitur terintegrasi di seluruh bahasa yang diuji (en, fr, ru).
Roman Starkov
9
@romkyns: Anda perlu menginstal kamus tanpa ekspresi untuk menghapusnya.
Denis de Bernardy
2
"OTOH, ini jauh lebih baik daripada pencarian teks MySQL, yang bahkan tidak mengindeks kata-kata dari tiga huruf atau kurang." Itu bukan batasan bawaan dari MySQL - itu adalah apa pun yang Anda atur di file konfigurasi. Jika Anda ingin mengindeks kata-kata satu huruf, cukup ubah satu nilai dalam konfigurasi.
Canuck
1
Ini mengkhawatirkan bahwa orang-orang memberikan perbandingan pada database yang belum sepenuhnya mereka jelajahi. MySQL BISA mengindeks kata-kata dengan tiga karakter atau lebih sedikit - Anda hanya perlu mengkonfigurasi dengan benar.
TheCarver
22

Hanya dua sen saya untuk pertanyaan yang sangat lama ini. Saya sangat merekomendasikan untuk melihat ElasticSearch .

Elasticsearch adalah server pencarian berdasarkan Lucene. Ini menyediakan mesin pencarian teks lengkap yang terdistribusi dan mampu-banyak dengan antarmuka web yang tenang dan dokumen JSON bebas skema. Elasticsearch dikembangkan di Jawa dan dirilis sebagai sumber terbuka di bawah ketentuan Lisensi Apache.

Keuntungan dibandingkan dengan FTS lainnya (pencarian teks lengkap) Mesin adalah:

  • Antarmuka yang tenang
  • Skalabilitas yang lebih baik
  • Komunitas besar
  • Dibangun oleh pengembang Lucene
  • Dokumentasi yang luas
  • Ada banyak perpustakaan open source yang tersedia (termasuk Django)

Kami menggunakan mesin pencari ini di proyek kami dan sangat senang dengannya.

vooD
sumber
10

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, ...

BJ.
sumber
2

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.

Fedir RYKHTIK
sumber