MATCH über zwei Tabellen

campari

Erfahrenes Mitglied
Habe zwei Tabellen in denen über Volltext gesucht werden soll. Einzeln ergibt 'relevance' fein differenzierte Matching-Faktor, aber wie unten mit OR verknüpft hat 'relevance' immer den Wert 0 oder 1. Wie bekomm ich da ein differenziertes Matching hin?


Code:
SELECT
(
    (MATCH(f.filename, f.description) AGAINST ('heinzmann'))
    OR
    (MATCH(t.tags) AGAINST ('heinzmann'))
) AS relevance

FROM file AS f
LEFT JOIN file_assign_tags AS fat ON fat.idFile=f.idFile
LEFT JOIN tags AS t ON t.idTag=fat.idTag

WHERE
(
    (MATCH(d.filename, f.description) AGAINST ('heinzmann' IN BOOLEAN MODE))
    OR
    (MATCH(t.tags) AGAINST ('heinzmann' IN BOOLEAN MODE))
) 

GROUP BY f.idFile ORDER BY relevance DESC
 
OR braucht True oder False (0 oder 1) um zu fonktionieren. Da kannst nicht sagen 'Resultat = 0,3 oder 0,7'.
Du kannst den Durchschnitt der Relevanz berechnen
SQL:
SELECT
    ((MATCH(f.filename, f.description) AGAINST ('heinzmann')) + (MATCH(t.tags) AGAINST ('heinzmann')))/2 AS relevance
FROM ....
 
Zuletzt bearbeitet von einem Moderator:
Ok macht Sinn.
Und wenn das Suchwort entweder in (f.filename, f.description) oder in (t.tags) vorkommen braucht um im Result zu landen?
 
Das Suchwort muss nicht mit beiden Fulltext matchen {(f.filename, f.description) && (t.tags)}, sondern es reicht aus wenn es mit (f.filename, f.description) oder mit (t.tags) matcht. Und es soll EIN Matchingfaktor über beide Fulltexte berechnet werden.
Also quasi deine vorgeschlagene Methode, nur da muss ja in beiden Fulltext das Suchwort vorkommen. Ka, ob das überhaupt geht. Und ob ich mich verständlicher ausgedrückt hab.
 
Also. Im WHERE-Teil brauchst du ja nur True oder False. Dort geht dein OR (ev noch um ' IN BOOLEAN MODE') erweitern. Es hat ein Treffer oder nicht.
 
Zurück