Buat tiga indeks teks lengkap
- a) satu di kolom kata kunci
- b) satu di kolom konten
- c) satu di kolom kata kunci dan konten
Lalu, kueri Anda:
SELECT id, keyword, content,
MATCH (keyword) AGAINST ('watermelon') AS rel1,
MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC
Intinya rel1
memberi Anda relevansi kueri Anda hanya di keyword
kolom (karena Anda membuat indeks hanya pada kolom itu). rel2
melakukan hal yang sama, tetapi untuk content
kolom. Anda sekarang dapat menambahkan dua skor relevansi ini bersama-sama dengan menerapkan pembobotan apa pun yang Anda suka.
Namun, Anda tidak menggunakan salah satu dari dua indeks ini untuk pencarian yang sebenarnya. Untuk itu, Anda menggunakan indeks ketiga Anda, yang ada di kedua kolom.
Indeks pada (kata kunci, konten) mengontrol ingatan Anda. Alias, apa yang dikembalikan.
Dua indeks terpisah (satu pada kata kunci saja, satu pada konten saja) mengontrol relevansi Anda. Dan Anda dapat menerapkan kriteria pembobotan Anda sendiri di sini.
Perhatikan bahwa Anda dapat menggunakan sejumlah indeks yang berbeda (atau, memvariasikan indeks dan bobot yang Anda gunakan pada waktu kueri berdasarkan faktor lain mungkin ... hanya mencari kata kunci jika kueri berisi kata perhentian ... kurangi bias pembobotan untuk kata kunci jika kueri berisi lebih dari 3 kata ... dll).
Setiap indeks menggunakan ruang disk, jadi lebih banyak indeks, lebih banyak disk. Dan pada gilirannya, jejak memori yang lebih tinggi untuk mysql. Selain itu, penyisipan akan memakan waktu lebih lama, karena Anda memiliki lebih banyak indeks untuk diperbarui.
Anda harus membandingkan kinerja (berhati-hati untuk mematikan cache kueri mysql untuk pembandingan jika tidak, hasil Anda akan miring) untuk situasi Anda. Ini tidak efisien untuk menilai Google, tetapi cukup mudah dan "tidak biasa" dan hampir pasti jauh lebih baik daripada penggunaan "suka" Anda dalam kueri.
Saya merasa ini bekerja dengan sangat baik.