pengembangan-web-mp.com

Pencarian Fulltext dengan InnoDB

Saya sedang mengembangkan aplikasi web bervolume tinggi, di mana bagian darinya adalah database MySQL dari posting diskusi yang perlu tumbuh hingga 20M + baris, dengan lancar.

Saya awalnya berencana menggunakan MyISAM untuk tabel (untuk built-in kemampuan pencarian teks lengkap ), tetapi pemikiran seluruh tabel dikunci karena operasi penulisan tunggal membuat saya rana. Kunci tingkat baris jauh lebih masuk akal (belum lagi keunggulan kecepatan InnoDB lainnya ketika berhadapan dengan tabel besar). Jadi, untuk alasan ini, saya cukup bertekad untuk menggunakan InnoDB.

Masalahnya adalah ... InnoDB tidak memiliki kemampuan pencarian teks lengkap bawaan.

Haruskah saya menggunakan sistem pencarian pihak ketiga? Suka Lucene (c ++) / Sphinx ? Apakah ada di antara Anda ninja basis data yang memiliki saran/bimbingan? Zoie LinkedIn (berdasarkan dari Lucene) sepertinya merupakan pilihan terbaik saat ini... telah dibangun berdasarkan kemampuan waktu nyata (yang sangat penting untuk aplikasi saya.) Saya agak ragu untuk melakukan namun tanpa wawasan ...

(FYI: akan menggunakan EC2 dengan rig memori tinggi, menggunakan PHP untuk melayani frontend)

93
brianreavis

Saya bisa menjamin fulltext MyISAM menjadi pilihan yang buruk - bahkan mengesampingkan berbagai masalah dengan tabel MyISAM secara umum, saya telah melihat hal-hal fulltext keluar dari Rails dan mulai merusak dirinya sendiri dan membuat crash MySQL secara teratur.

Mesin pencari khusus pasti akan menjadi pilihan paling fleksibel di sini - simpan data posting di MySQL/innodb, dan kemudian ekspor teks ke mesin pencari Anda. Anda dapat mengatur membangun/menerbitkan indeks penuh secara berkala dengan cukup mudah, dan menambahkan pembaruan indeks waktu nyata jika Anda merasa perlu dan ingin menghabiskan waktu.

Lucene dan Sphinx adalah pilihan yang baik, seperti Xapian , yang bagus dan ringan. Jika Anda memilih rute Lucene jangan menganggap bahwa Clucene akan lebih baik, bahkan jika Anda lebih suka untuk tidak bergulat dengan Jawa, meskipun saya tidak benar-benar memenuhi syarat untuk membahas pro dan kontra dari keduanya.

50
Ian Wilkes

Bersamaan dengan penghapusan MyISAM, InnoDB pencarian teks lengkap (FTS) akhirnya tersedia di rilis MySQL 5.6.4.

Dari http://dev.mysql.com/doc/refman/5.6/id/innodb-table-and-index.html#innodb-fulltext-index :

Indeks ini secara fisik direpresentasikan sebagai seluruh tabel InnoDB, yang ditindaklanjuti dengan kata kunci SQL seperti klausa FULLTEXT dari pernyataan CREATE INDEX, MATCH () ... MELAWAN sintaks dalam pernyataan SELECT, dan pernyataan OPTIMIZE TABLE.

Sementara mesin lain memiliki banyak fitur yang berbeda, yang ini adalah InnoDB, jadi itu asli (yang berarti ada jalur peningkatan), dan itu membuatnya menjadi pilihan yang berharga.

55
Jeremy Smyth

Anda harus menghabiskan satu jam dan pergi melalui instalasi dan uji coba Sphinx dan Lucene. Lihat apakah memenuhi kebutuhan Anda, sehubungan dengan pembaruan data.

Salah satu hal yang mengecewakan saya tentang Sphinx adalah bahwa ia tidak mendukung insert tambahan dengan sangat baik. Yaitu, sangat mahal untuk mengindeks ulang setelah disisipkan, begitu mahal sehingga solusi yang disarankan adalah untuk membagi data Anda menjadi baris yang lebih lama dan tidak berubah dan baris yang lebih baru dan mudah berubah. Jadi setiap pencarian yang dilakukan aplikasi Anda harus mencari dua kali: sekali pada indeks yang lebih besar untuk baris lama dan juga pada indeks yang lebih kecil untuk baris terbaru. Jika itu tidak terintegrasi dengan pola penggunaan Anda, Sphinx ini bukan solusi yang baik (setidaknya tidak dalam implementasi saat ini).

Saya ingin menunjukkan kemungkinan solusi lain yang dapat Anda pertimbangkan: Google Custom Search . Jika Anda dapat menerapkan beberapa SEO ke aplikasi web Anda, maka lakukan outsourcing fungsi pengindeksan dan pencarian ke Google, dan tanamkan bidang pencarian teks Google ke situs Anda. Ini bisa menjadi cara yang paling ekonomis dan terukur untuk membuat situs Anda dapat dicari. 

11
Bill Karwin

Mungkin Anda tidak boleh mengabaikan FT MySQL dengan cepat. Craigslist digunakan untuk menggunakannya .

Kecepatan MySQL dan Pencarian Teks Lengkap memungkinkan craigslist untuk melayani penggunanya .. craigslist menggunakan MySQL untuk melayani sekitar 50 juta pencarian per bulan dengan kecepatan hingga 60 pencarian per detik. "

sunting

Seperti yang dikomentari di bawah ini, Craigslist tampaknya telah beralih ke Sphinx beberapa waktu di awal 2009.

3
bobobobo

Sphinx, seperti yang Anda tunjukkan, cukup bagus untuk hal ini. Semua pekerjaan ada di file konfigurasi. Pastikan apa pun tabel Anda dengan string memiliki beberapa kunci id integer unik, dan Anda harus baik-baik saja. 

1
Gregg Lind

Jika semuanya gagal, selalu ada soundex_match , yang sayangnya tidak terlalu cepat dan akurat

0
user1612250

Anda harus melihat pada Sphinx. Layak dicoba. Pengindeksannya super cepat dan didistribusikan. Anda harus melihat ini (http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown) webminar. Ini berbicara tentang pencarian dan memiliki beberapa tolok ukur yang rapi. Anda mungkin merasa terbantu.

0
Muhammad

coba ini

ROUND((LENGTH(text) - LENGTH(REPLACE(text, 'serchtext', ''))) / LENGTH('serchtext'),0)!=0
0
Rakesh Ojha