1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

InnoDB Suche mit Gewichtung?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Swiper, 9 November 2019.

  1. Swiper

    Swiper Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

  3. Walter

    Walter Administrator Mitarbeiter

    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
    
     
  4. Swiper

    Swiper Neuer Benutzer

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden