Ich versuche, eine Punktzahl für den gesamten Abschnitt der SELECT-Anweisungen zu erhalten
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')
In diesem Fall sind die Bewertungen pro Tabelle + nicht nach Relevanz geordnet
Aber ich habe diese Methode ausprobiert, die funktioniert, aber keine Produktion wert ist
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
Der obige Code wird nicht gemocht, da es Punktzahlen pro Tabelle gibt, die zusammengefügt und sortiert werden. Ein schlechter Ansatz.
Also habe ich versucht , um MATCH() AGAINST()
für data
in TOP LEVEL SELECT dies auch. (Hat nicht funktioniert)
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
Die obige Anweisung ist perfekt für mich, funktioniert aber nicht, da die data
Spalte im laufenden Betrieb erstellt wird und die Verwendung eines FULLTEXT-INDEX nicht unterstützt wird.
Meine Frage ist, wie ich vorgehen soll, um meinen Motor zum Laufen zu bringen.
- Kannst du irgendwie
data
einen FULLTEXT machen ? - Gibt es eine andere Möglichkeit als IN BOOLEAN MODE, die keine Punktzahlen unterstützt?
- Gibt es einen Ansatz für dieses gesamte Thema, mit dem es funktioniert? Das Erstellen einer temporären Tabelle löst dies nicht. Die 50% -Regel von MATCH () AGAINST () bewirkt, dass eine Abfrage 0 Ergebnisse zurückgibt, aber es gibt viele
- Vielleicht gibt es etwas, das ich vermisse?
- Das Erstellen einer VIEW funktioniert auch nicht, MySQL unterstützt keine INDEX-es auf VIEWs.
- Vielleicht ist es eine gute Idee, den IN BOOLEAN-MODUS zu verwenden und die Bewertung manuell zu erstellen?
Ich arbeite seit mehr als zwei Tagen für dieses Problem. Deshalb bitte ich um Hilfe. Vielen Dank.
quelle