Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengutamakan Perkaitan dalam Carian Teks Penuh MySQL Merentasi Berbilang Lajur?

Bagaimanakah Saya Boleh Mengutamakan Perkaitan dalam Carian Teks Penuh MySQL Merentasi Berbilang Lajur?

DDD
Lepaskan: 2024-12-01 03:59:13
asal
915 orang telah melayarinya

How Can I Prioritize Relevance in MySQL Full Text Search Across Multiple Columns?

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
Salin selepas log masuk

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
...
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan