InnoDB Suche mit Gewichtung?

Swiper

Neuer Benutzer
Beiträge
2
Hallo!

Ich hoffe, es kann mir hier jemand helfen. Ich möchte eine VollTextSuche mittels innodb realisieren. Es gibt auch zich Beispiele, diese funktionieren aber nur für myIsam.

Und zwar sollen bestimmte Spalten bei einem Suchtreffer einen höheren ScoreWert erhalten. Also z.B. der Titel soll bei einem Treffer * 3 genommen werden, die Spalte 'unwichtiger' nur * 0.5. Leider kann ich das Matching nicht auseinander nehmen, mySQL verlangt immer ALLE Spalten bei einer Abfrage. Das war unter myIsam anders, meine ich.

Hier mein bisheriger Code bei dem der Scorewert nur anhand der GesamtSuchTreffer errechnet wird:

SELECT id, einrichtung1, plz, ort, strasse, `desc`, beschreibung, web, email, MATCH(einrichtung1, einrichtung2, plz, ort, strasse, beschreibung,beschreibung2,beschreibung3,beschreibung4,beschreibung5,beschreibung6) AGAINST ('+firma +bonn*' IN BOOLEAN MODE) as score FROM `firmendb` HAVING score > 1 ORDER BY score Desc

Vielleich kann mir hier jemand weiter helfen!?

Cu Swiper
 
Werbung:
Die Spalten einzeln zu matchen und mit einem Gewicht zu multiplizieren ist keine Möglichkeit?

Code:
SELECT
   (MATCH(spalte1) AGAINST(suchbegriff) * 0.5)
 + (MATCH(spalte2) AGAINST(suchbegriff) * 2)
 + (MATCH(spalte3) AGAINST(suchbegriff) * 3)
 AS score
FROM .....
ORDER BY score
 
Werbung:
Hi,

Das Problem sind die Matches! Sind mehrere Spalten in einem Fulltext, müssen diese auch zwingend angegeben werden. Ich habe mich jetzt sehr sehr viele Stunden damit herum geschlagen. Letztendlich habe ich nun nicht einen FullText angelegt, sondern 3 FullTextSpalten. Diese kann ich nun nach einem ähnlichem Schema von Walter, gesondert abfragen und multiplizieren. Das läuft.

So wollte ich es aus Performancegründen eigentlich nicht, aber so scheint es richtig zu sein!?

Nun habe ich aber noch ein anderes altes Problem:
Und zwar kann ich nicht nach 'Köln-Bonn' suchen. Ich wandele dies ja in ein '+Köln-Bonn' um. mysql versteht darunter aber '+Köln -Bonn'. Hierfür habe ich noch keine Lösung gefunden. Genauso wie ich KEINE '@' Zeichen bzw. Mailadressen suchen kann. Dann bekomme ich direkt einen fatal Error.

Ich filtere zwar ein paar Sonderzeichen anhand folgenden Codes raus:
$keyword = trim($keyword, "\x22..\x2C");

Aber das filtert halt nur. Das @ Zeichen möchte ich ja gerade nicht filtern.
 
Zurück
Oben