Tôi đang cố gắng để có điểm cho toàn bộ phần của câu lệnh CHỌN
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')
Trong trường hợp như vậy, điểm số trên mỗi bảng + chúng không được sắp xếp theo mức độ liên quan
Nhưng tôi đã thử phương pháp này, nó đang hoạt động nhưng không có giá trị sản xuất
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
Mã trên không thích vì điểm có mỗi bảng, chúng được nối và đặt hàng. Một cách tiếp cận xấu.
Vì vậy, tôi đã cố gắng để MATCH() AGAINST()
cho data
trong TOP CẤP CHỌN cũng này. (KHÔNG LÀM VIỆC)
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
Tuyên bố trên là hoàn hảo đối với tôi, nhưng nó không hoạt động vì data
cột được tạo nhanh chóng và nó không hỗ trợ để có INDEX FULLTEXT.
Câu hỏi của tôi là làm thế nào để tiến hành để làm cho động cơ của tôi làm việc.
- Bạn có thể bằng cách nào đó thực hiện
data
FULLTEXT - Có cách nào để làm cho nó hoạt động ngoài CHẾ ĐỘ BOOLESE không hỗ trợ điểm số không
- Có một cách tiếp cận cho toàn bộ chủ đề này sẽ làm cho nó hoạt động? Tạo một bảng tạm thời không giải quyết được điều này, quy tắc MATCH () AGAINST () 50% tạo ra một truy vấn trả về 0 kết quả, nhưng có rất nhiều
- Có lẽ có một cái gì đó nhỏ mà tôi bỏ lỡ?
- Tạo VIEW cũng không hoạt động, MySQL không hỗ trợ INDEX-es trên VIEWs.
- Có lẽ đó là một ý tưởng tốt để sử dụng IN BOOLESE MODE và tạo điểm số bằng tay?
Tôi đã làm việc cho vấn đề này trong hơn hai ngày. Vì vậy, tôi vui lòng yêu cầu một số trợ giúp. Cảm ơn.