Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa memanipulasi relevansi pencarian teks lengkap MySQL untuk membuat satu bidang lebih 'berharga' daripada yang lain?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menghubungkan beberapa database di PHP, MYSQLi &PDO

  2. mysqli_stmt::bind_param():Jumlah elemen dalam string definisi tipe tidak cocok dengan jumlah variabel bind

  3. Apakah ada kemampuan ANY_VALUE untuk mysql 5.6?

  4. Tidak dapat mengubah kolom yang digunakan dalam batasan kunci asing

  5. Cara Memperbarui Tampilan di MySQL