Konzept zur Keyword-Suche
bearbeitet vonMoin,
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
~~~php
$keyword = "shanty-chor";
$keyword = str_replace( "-", "%", mb_strtoupper( $keyword ));
~~~
~~~sql
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:
~~~php
$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?
Gruß, Linuchs
Konzept zur Keyword-Suche
bearbeitet vonMoin,
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
~~~php
$keyword = "shanty-chor";
$keyword = str_replace( "-", "%", mb_strtoupper( $keyword ));
~~~
~~~sql
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:
~~~php
$arr = explode( " ", "shanty chor festival" );
$q = "
..."
foreach( $arr as $suchwort ) {
$q .= "OR UPPER( trm1.titel ) LIKE '%".$suchwort."%' COLLATE utf8_bin
":
}
~~~
Wie könnte ich die Ausgabe sortieren, dass die meisten Übereinstimmungen zuerst kommen?
Gruß, Linuchs
Konzept zur Keyword-Suche
bearbeitet vonMoin,
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
~~~php
$keyword = "shanty-chor";
$keyword = str_replace( "-", "%", mb_strtoupper( $keyword ));
~~~
~~~sql
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 Feldinhalte, in denen die Worte in anderer Reihenfolge vorkommen:
~~~php
$arr = explode( " ", "shanty chor festival" );
$q = "
..."
foreach( $arr as $suchwort ) {
$q .= "OR UPPER( trm1.titel ) = '".$suchwort."'\n
":
}
~~~
Wie könnte ich die Ausgabe sortieren, dass die meisten Übereinstimmungen zuerst kommen?
Gruß, Linuchs