Pencarian wildcard pada kolom dalam tabel besar (›10.000.000 baris) di MySQL

Teknik apa yang akan Anda gunakan untuk mengimplementasikan pencarian konten di kolom pada tabel yang sangat besar di MySql? Katakanlah misalnya Anda memiliki 10.000.000 email yang disimpan dalam tabel di database dan ingin menerapkan pencarian subjek, yang memungkinkan saya mencari satu atau lebih kata yang ada di subjek email. Jika pengguna menelusuri "santa natal" Anda akan menemukan email dengan subjek seperti "Sinterklas mengunjungi kami pada natal ini" dan "natal, akankah santa muncul".

Ide saya adalah memproses semua kata dalam subjek (hapus semua angka, tanda khusus, koma, dll) dan menyimpan setiap kata dalam tabel indeks, di mana saya memiliki indeks unik pada kolom kata. Lalu saya akan menautkannya ke tabel email dengan tabel hubungan banyak ke banyak.

Apakah ada cara yang lebih baik untuk melakukan pencarian wildcard pada tabel yang sangat besar?

Apakah ada database yang mendukung pencarian semacam ini?


person sindre j    schedule 16.12.2008    source sumber


Jawaban (6)


Anda dapat menggunakan indeks FULLTEXT jika Anda menggunakan MyISAM sebagai mesin penyimpanan. Namun, MySQL secara umum tidak terlalu bagus dalam pencarian teks.

Pilihan yang jauh lebih baik adalah menggunakan solusi pengindeksan teks khusus seperti Lucene atau Sphinx. Secara pribadi saya akan merekomendasikan Sphinx - ia memiliki integrasi yang hebat dengan PHP dan MySQL dan sangat, sangat cepat (dapat digunakan untuk mempercepat bahkan permintaan biasa - melakukan pengelompokan dan pengurutan dengan sangat cepat).

Wikipedia memiliki daftar mesin pengindeksan yang berbeda - di sini.

person Eran Galperin    schedule 16.12.2008

Tabel MyISAM MySQL mendukung indeks FULLTEXT, yang membantu dalam pencarian semacam ini.

Namun ini bukanlah teknologi tercepat yang tersedia untuk pencarian semacam ini. Dan Anda tidak dapat menggunakannya pada data yang disimpan di tabel InnoDB.

Saya telah mendengar beberapa hal bagus tentang Pencarian Sphinx, namun saya belum menggunakannya.

Berikut blog lain tentang Sphinx: http://capttofu.livejournal.com/13037.html

person Bill Karwin    schedule 16.12.2008

Meskipun indeks teks lengkap mysql dimungkinkan, saya kira saya akan mempertimbangkan menggunakan sesuatu yang dirancang untuk menjadi mesin pencari seperti Lusen.

person Zoredache    schedule 18.12.2008

Ini terdengar seperti pencarian teks lengkap, yang didukung SQL Server.

Tapi ide Anda secara umum masuk akal. Anda secara efektif menghitung "indeks" di tabel Anda terlebih dahulu untuk mempercepat pencarian.

person Craig Shearer    schedule 16.12.2008

Anda ingin melihat fungsi MATCH...AGAINST.

Lihat, misalnya: Menggunakan Pencarian Teks Lengkap MySQL

person Eli    schedule 16.12.2008
comment
cara menangani aturan 50% menggunakan MATCH ----AGAINST - person Manmeet Khurana; 14.05.2018

periksa "penelusuran teks lengkap" di dokumen MySQL ( AFAIK, semua DBMS saat ini mendukung ini)

person Javier    schedule 16.12.2008