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

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

DDD
Lepaskan: 2024-11-30 19:25:13
asal
311 orang telah melayarinya

How Can I Prioritize Column Relevance in MySQL Full-Text Search?

Mengutamakan Perkaitan Lajur dalam Carian Teks Penuh MySQL dengan padanan() dan menentang()

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

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

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

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

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!

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