Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengutamakan Perkaitan dalam Carian Teks Penuh MySQL Merentasi Berbilang Lajur?
Carian Teks Penuh MySQL: Mengoptimumkan Perkaitan dan Pengutamaan Lajur
Apabila melakukan carian teks penuh merentas berbilang lajur jadual, selalunya wajar untuk memesan keputusan mengikut perkaitan. Fungsi MATCH() AGAINST() MySQL menyediakan cara yang cekap untuk mencapai perkara ini.
Walau bagaimanapun, timbul situasi yang penting untuk mengutamakan perkaitan dalam lajur tertentu. Katakan, sebagai contoh, kami mempunyai jadual yang mengandungi halaman dengan lajur kepala dan badan, di mana kami ingin memberi keutamaan yang lebih tinggi kepada padanan yang terdapat dalam lajur kepala.
Penyelesaian: Menggabungkan Perkaitan Khusus Lajur
Untuk menangani keperluan ini, kami boleh memanfaatkan klausa MATCH() tambahan untuk mengira perkaitan secara berasingan untuk kepala lajur. Dengan menggabungkan ini dengan perkaitan keseluruhan, kami boleh mengutamakan hasil yang sepadan dengan kedua-dua kriteria carian keseluruhan dan lajur yang ditentukan.
SELECT pages.*, MATCH(head, body) AGAINST('some words') AS relevance, MATCH(head) AGAINST('some words') AS head_relevance FROM pages WHERE MATCH(head, body) AGAINST('some words') ORDER BY head_relevance DESC, relevance DESC
Dalam pertanyaan ini, kami mengira kedua-dua perkaitan keseluruhan (perkaitan) dan lajur kepala- perkaitan khusus (head_relevance). Dengan menyusun keputusan terlebih dahulu mengikut perkaitan_kepala dalam tertib menurun (DESC) dan kemudian mengikut kaitan juga dalam tertib menurun, kami dengan berkesan mengutamakan padanan yang terdapat dalam lajur kepala.
Bonus: Mengira Kejadian Istilah Carian
Walaupun pendekatan di atas meningkatkan keutamaan lajur, ia tidak memberikan kiraan kemunculan istilah carian dalam lajur yang ditentukan. Untuk mencapai matlamat ini, kita boleh menggunakan fungsi FULLTEXT() dan LENGTH():
... SELECT pages.*, MATCH(head, body) AGAINST('some words') AS relevance, MATCH(head) AGAINST('some words') AS head_relevance, LENGTH(head) - LENGTH(REPLACE(head, 'some words', '')) AS head_count, LENGTH(body) - LENGTH(REPLACE(body, 'some words', '')) AS body_count FROM pages ...
Ini memanjangkan pertanyaan sebelumnya untuk mengira kiraan kejadian istilah carian dalam kedua-dua head (head_count) dan body (body_count) lajur.
Pilihan Tambahan: Postgres dan Pemberat
Jika sesuai untuk projek anda, Postgres menawarkan ciri lanjutan yang membolehkan kawalan yang lebih baik ke atas kedudukan perkaitan. Keupayaan cariannya menyokong wajaran istilah atau operator tertentu, membolehkan penyesuaian lebih besar hasil carian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengutamakan Perkaitan dalam Carian Teks Penuh MySQL Merentasi Berbilang Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!