Dalam carian teks penuh menggunakan MySQL's MATCH() AGAINST(), menyusun keputusan mengikut perkaitan adalah mudah. Walau bagaimanapun, bagaimana jika anda ingin mengutamakan perkaitan lajur tertentu, seperti kepala, sambil masih mempertimbangkan kaitan lajur lain seperti badan?
Pertimbangkan pertanyaan awal ini:
SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
Ia melakukan carian teks penuh pada lajur kepala dan badan, mengembalikan baris yang sepadan.
Untuk memesan mengikut perkaitan, kami boleh menambah lajur dikira:
SELECT *, MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) ORDER BY relevance
Ini memperkenalkan lajur perkaitan yang menunjukkan perkaitan keseluruhan setiap baris. Walau bagaimanapun, ia melayan kedua-dua lajur kepala dan badan secara sama rata.
Untuk mengutamakan lajur kepala, satu pendekatan ialah menambah lajur perkaitan yang berasingan untuknya:
SELECT *, MATCH (head, body) AGAINST ('some words') AS relevance, MATCH (head) AGAINST ('some words') AS title_relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY title_relevance DESC, relevance DESC
Ini mencipta lajur title_relevance yang mewakili perkaitan lajur kepala sahaja. Dengan memesan dahulu mengikut title_relevance dan kemudian mengikut perkaitan, kami mengutamakan baris dengan kandungan kepala yang sangat berkaitan.
Sebagai bonus, kami boleh mengubah suai klausa ORDER BY untuk mengambil kira bilangan kemunculan perkataan yang dinyatakan dalam kepala lajur:
ORDER BY title_relevance + (total_head_words * weight_per_word) DESC
Di sini, total_head_words mewakili bilangan kali perkataan itu muncul dalam lajur kepala dan weight_per_word ialah pengganda yang melaraskan kepentingannya.
Sebagai alternatif, jika anda mempunyai fleksibiliti untuk menggunakan PostgreSQL, ia menawarkan kedudukan yang lebih maju dan keupayaan pemberat untuk carian teks penuh.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengutamakan Perkaitan Lajur dalam Carian Teks Penuh MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!