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
だけでなく、このようTOPでLEVEL SELECT。(動作しません)
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
フルテキストを作成できますか - スコアをサポートしていないインブールモード以外にそれを機能させる方法はありますか
- このトピック全体を機能させるアプローチはありますか?一時テーブルを作成してもこれは解決されません。MATCH()AGAINST()の50%ルールでは、クエリは0の結果を返しますが、
- たぶん私が見逃している何かがありますか?
- VIEWの作成も機能せず、MySQLはVIEWでのINDEX-esをサポートしていません。
- 多分それはブールモードで使用してスコアリングを手動で作成するのは良い考えですか?
私はこの問題に2日以上取り組んできました。だから私は親切にいくつかの助けを求めます。ありがとう。