Linuchs: Konzept zur Keyword-Suche

Beitrag lesen

problematische Seite

Moin,

gibt es irgendwo eine Norm oder ein Usus (Brauch), nach was gesucht werden muss, wenn der User bestimmte Begriffe eingibt?

Vor Jahren gab es das mal bei Google, zuerst sollten die Treffer kommen, die sämtliche Worte des Suchbegriffs enthalten. Ist nicht mehr so.

In meinem Kalender biete ich eine Suchfunktion an.

Nehmen wir mal shanty-chor, das kann im Namen von Mitgliedern oder in Titeln von Veranstaltungen enthalten sein. Andere Suchbegriffe können auch Ortsnamen finden.

Wer danach sucht, erwartet wohl auch Treffer wie shantychor und shanty chor, aber nicht Wort-Drehungen wie chor für shantys. Das wäre abgedeckt mit

$keyword = "shanty-chor";
$keyword = str_replace( "-", "%", mb_strtoupper( $keyword ));
AND         UPPER( trm1.titel ) LIKE '%".$keyword."%' COLLATE utf8_bin

(COLLATE utf8_bin sorgt dafür, dass bei Suche nach ö NICHT AUCH nach o gesucht wird)

Es wäre wohl falsch, alle Sonderzeichen und Leerzeichen des Suchbegriffs mit % als SQL-Platzhalter zu ersetzen? Aber wenn ich nur Leerzeichen ersetze, findet shanty-chor die anderen Schreibweisen nicht.

Bei Eingabe mit Gänsefüßen "shanty chor" ist das Leerzeichen relevant.

Alternativer Ansatz: Nach mehreren Worten suche ich einzeln, dann werden auch Dreher gefunden und Feldinhaltemit anderen Worten dazwischen:

$arr = explode( " ", "shanty chor festival" );
$q = "
..."
foreach( $arr as $suchwort ) {
  $q .= "OR LOWER( trm1.titel ) LIKE '%".$suchwort."%' COLLATE utf8_bin
":
}

Wie könnte ich die Ausgabe sortieren, dass die meisten Übereinstimmungen zuerst kommen? Chorfestivals ohne shanty sind in diesem Zusammenhang nicht interessant.

Gruß, Linuchs