SELECT ifadelerinin tüm bölümü için bir puan almaya çalışıyorum
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')
Bu gibi durumlarda puanlar tabloya göre + alaka düzeyine göre sıralanmaz
Ama işe yarayan ama üretime değmeyen bu yöntemi denedim
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
Yukarıdaki kod beğenilmez çünkü tablo başına puanlar birleştirilir ve sıralanır. Kötü bir yaklaşım.
Bu yüzden çalıştı MATCH() AGAINST()
için data
de bu şekilde TOP seviyesini seçin. (ÇALIŞMADI)
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
Yukarıdaki ifade benim için mükemmel, ancak data
sütun anında oluşturulduğu ve FULLTEXT INDEX'e sahip olması desteklemediği için çalışmıyor.
Benim sorum motorumu çalıştırmak için nasıl devam edeceğim.
- Bir şekilde
data
FULLTEXT yapabilir misin - Puanları desteklemeyen BOOLEAN MODU dışında çalışmasını sağlayan herhangi bir yol var mı
- Bu konunun tamamında işe yarayacak bir yaklaşım var mı? Geçici bir tablo oluşturmak bunu çözmez,% 50 MATCH () AGAINST () kuralı bir sorgu 0 sonuç döndürür, ancak birçok
- Belki özlediğim küçük bir şey var mı?
- Bir VIEW oluşturmak da çalışmaz, MySQL, VIEW'larda INDEX-es'i desteklemez.
- BOOLEAN MODE IN kullanmak ve manuel olarak puanlama oluşturmak iyi bir fikir olabilir mi?
Bu konu için iki günden fazla süredir çalışıyorum. Bu yüzden lütfen biraz yardım istiyorum. Teşekkürler.