ฉันพยายามที่จะมีคะแนนสำหรับส่วนทั้งหมดของคำสั่ง SELECT
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
ในกรณีดังกล่าวคะแนนต่อตาราง + พวกเขาจะไม่เรียงตามความเกี่ยวข้อง
แต่ฉันลองวิธีนี้ซึ่งใช้งานได้ แต่ไม่คุ้มค่ากับการผลิต
SELECT * FROM (
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `score` DESC
รหัสข้างต้นไม่ชอบเพราะคะแนนมีต่อตารางพวกเขาจะเข้าร่วมและสั่งซื้อ วิธีการที่ไม่ดี
ดังนั้นฉันจึงพยายามที่จะMATCH() AGAINST()
เลือกdata
ในระดับสูงสุดเช่นนี้ (ไม่ทำงาน)
SELECT *,MATCH(`data`) AGAINST('keyword') as `good_score` FROM (
SELECT *,`result` as `data`,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,`content` as `data`,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,`text` as `data`,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `good_score` DESC
ข้อความข้างต้นนั้นสมบูรณ์แบบสำหรับฉัน แต่มันไม่ทำงานเพราะdata
คอลัมน์ถูกสร้างขึ้นทันทีและไม่สนับสนุนให้มี FULLTEXT INDEX
คำถามของฉันคือวิธีการทำให้เครื่องยนต์ทำงานต่อไป
- คุณสามารถสร้าง
data
FULLTEXT ได้ไหม - มีวิธีใดบ้างที่จะทำให้มันทำงานนอกเหนือจาก IN BOOLEAN MODE ที่ไม่รองรับคะแนน
- มีวิธีการในหัวข้อทั้งหมดนี้ที่จะทำให้การทำงานหรือไม่ การสร้างตารางชั่วคราวไม่ได้แก้ปัญหานี้กฎ 50% ของ MATCH () เทียบกับ () ทำให้แบบสอบถามส่งคืนผลลัพธ์ 0 แต่มีจำนวนมาก
- อาจมีบางสิ่งเล็กน้อยที่ฉันคิดถึง
- การสร้าง VIEW ไม่ทำงานเช่นกัน MySQL ไม่รองรับ INDEX-es บน VIEW
- อาจเป็นความคิดที่ดีที่จะใช้ IN BOOLEAN MODE และสร้างคะแนนด้วยตนเอง?
ฉันทำงานกับปัญหานี้มานานกว่าสองวันแล้ว ดังนั้นฉันขอความช่วยเหลือ ขอบคุณ