Highlight ausgabe Im Such Text?

eperdemer

Mitglied
Moinsen,

ich habe eine Volltext Suche auf eine MySQL Datenbank mit MATCH () AGAINST();
Nun Möchte ich das in den Ergebnissen der Suchbegriff bzw. ein Teil des Suchbegriffes da er aus mehrer Wörtern besteht kann. Entsprechend Markiert wird.

Da die FULLTEXT Suche auch ergebnisse die nur eine Teil übereinstimmung haben wenn der Begriff aus mehrer Wörtern besteht.

Habe dazu folgendes Code:
PHP:
      $shortenBy = "90";
      $q_array = explode(" ", trim($q));
      foreach($q_array AS $q_value){
        $suchmuster[] = '@('.quotemeta($q_value).')@si';
        $ersatz[] = '<span '.CSS_HIGHLIGHT.'>\1</span>';        
        }

          preg_match('/(.*?)('.preg_quote($q).')(.*)/smi', $sql_array['site'], $matches);
          $matches[1] = (strlen($matches[1])>$shortenBy) ? '...'.substr($matches[1], -$shortenBy) : $matches[1];
          $matches[3] = (strlen($matches[3])>$shortenBy) ? substr($matches[3], 0, $shortenBy).'...' : $matches[3];
          $result = $matches[1].$matches[2].$matches[3];
          
          $result = preg_replace($suchmuster, $ersatz, $result)."\n";

bei den Suchergebnissen wo der Komplette Suchbegriff gefunden wurde Klappt die ausgabe wunderbar, wenn aber nur ein Teil des Suchbegriffes gefunden wird erfolgt keine Ausgabe.

Kann mir einer Dabei Helfen das problem zu Lösen?

Vielen Dank Schonmal
ePeRDeMeR
 
Zuletzt bearbeitet:
Hi,

hmm, wieso benutzt do sowas nicht:

Code:
SELECT * FROM `deinetabelle` WHERE `content` LIKE '%suchwort%'

Dann hast du alle Posts, die "suchwort" enthalten.

Dann kannst du es mit preg_replace oder einfach str_replace "suchwort" in "<span style="color: #990000;">suchwort</span>" ersetzen.

MfG
 
Da für eine LIKE Suche die Datenbank zu Groß ist (über 1Mio Einträge), und die Sortierung soll nach Relevanz sein was beim LIKE nicht geht.

Zudem würde LIKE merh oder weniger eine exakte übereinstimmung finden und keine Teile des Suchbegriffes.

Wenn z.B. nach "Test Text" gesucht würde würde er ja die Einträge wo nur Test oder nur Text drinne Stehen nicht ausgeben.
 
Zurück