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

MySQL Volltextsuche - Problem mit dem / im Suchbegriff

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von web4free, 2 Mai 2014.

  1. web4free

    web4free Neuer Benutzer

    Hallo liebes Forum,

    Soweit verstehe ich den Aufbau und das Abarbeiten einer Volltextsuche in MySQL.
    Es funktioniert auch alles wie gewünscht. Nur bei bestimmten Suchanfragen scheitert die Suche und ich vermute, dass es in diesem Falle beim / liegt.

    Folgendes wird gesucht und als Ergebnis zurück geliefert (Beispiele):
    domain.at - findet alles zu domain.at
    domain.at front - findet alles zu domain.at und front
    domain.at/front liefert mir aber alles zu domain.at zurück und nicht wie gewünscht zu domain.at/front

    Die Struktur der Suchtabelle würde so aussehen:
    CREATE TABLE `suchtabelle` (
    `id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
    `asistId` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0',
    `suchfeld` TEXT COLLATE latin1_german2_ci NOT NULL ,
    PRIMARY KEY ( `id` ) ,
    UNIQUE KEY `insId` ( `asistId` ) ,
    FULLTEXT KEY `suchfeld` ( `suchfeld` )
    ) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_german2_ci;

    Die Abfrage löse ich folgenderweise:
    SELECT SQL_CACHE b.*
    FROM suchtabelle AS a
    JOIN asist AS b ON
    MATCH (a.suchfeld) AGAINST ('orf.at/front' IN BOOLEAN MODE)
    AND b.Id = a.asistId
    AND b.gesperrt = '0'
    ORDER BY b.Domain, b.Page ASC
    LIMIT 0 , 30

    Ich versteh nicht, wo da der Wurm begraben ist.
    Besten Dank für Eure Denkanstöße

    lg.
    Werner
     
  2. ukulele

    ukulele Datenbank-Guru

    Ich gehe mal davon aus das MATCH AGAINST wie LIKE arbeitet und in diesem Zusammenhang das \ vor dem Buchstaben speziell interpretiert wird (ohne jetzt alles gelesen zu haben). Siehe:
    https://dev.mysql.com/doc/refman/5.1/de/string-comparison-functions.html
     
  3. web4free

    web4free Neuer Benutzer

    Hallo Ukulele,
    Ich konnte das Problem nun etwas eingrenzen, was wiederum das Problem verschärft :-(
    Es dürfte nicht nur am / sondern wie es aussieht an den Punkten im Suchbegriff liegen.
    Der Suchbegriff "advertorial" liefert mir 21 Ergebnisse zurück in denen der gesuchte Begriff beinhaltet ist - das ist richtig so.
    Wenn ich das etwas einschränken möchte mit dem Begriff "advertorial.kur" sollten jetzt nur die 17 relevanten Datensätze zurückgeliefert werden - leider aber bekomme ich alle Ergebnisse wieder angezeigt die "advertorial" beinhaltet haben.

    So wie es aussieht muß ich wohl bestimmte Zeichen wie zB. / und . gesondert behandeln - ein vorangestelltes \ fruchtet da leider auch nicht :-(
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja.
     
  5. ukulele

    ukulele Datenbank-Guru

    Escape Sequenzen lautet der passende Begriff. Gewisse Zeichen haben in deinem Suchbegriff eine spezielle Bedeutung wie z.B. Platzhalterfunktionen, auch auf % und _ solltest du achten. Mit replace() kann man diese Zeichen aber z.B. verdoppeln dann sollten sie immer korrekte Anwendung finden. Dazu aber bitte in der Doku jeweils nachschauen.
     
  6. web4free

    web4free Neuer Benutzer

    Vielen Dank für den Hinweis. Jetzt bin ich echt fündig geworden :)
    Ich hab zu verworren gedacht und hab dabei übersehen, dass der . eigentlich als Komma gilt und somit ein Seperator ist **grumml**

    Ich habs zwar jetzt nicht elegant über die DB lösen können, hab mir aber eine kleine Schleife geschrieben, die mir die Ergebnisse jetzt so liefert wie Sie sollen.

    $AktuellerSuchbegriff = '';
    $AsB = explode(' ', $_GET['therm']);
    foreach($AsB as $value) {
    if(preg_match("/\./", $value)) {
    $AktuellerSuchbegriff .= '+"' . $value . '" ';
    } else {
    $AktuellerSuchbegriff .= '+' . $value . ' ';
    }
    }

    Besten Dank nochmals für den Gedankenstoß.
    lg. Werner
     
  7. ukulele

    ukulele Datenbank-Guru

    Such mal vorsichtshalber nach

    ` DELETE suchtabelle

    in deiner Anwendung.
     
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