Mailinglisten-Archive |
Torsten Berger - WahnBerlin schrieb:
>>... schließlich sind normalerweise & und ; keine Wortzeichen,
>>werden also von MySQL als Trenner behandelt
>
> Dafür erst mal vielen Dank. Da lag genau mein Denkfehler, ich hab
> zwar z.B. das "&" als "besonderes" Zeichen erkannt, aber nicht
> bedacht, dass es gar nicht erst zu den indizierten Zeichen gehört.
ja die Suche in Boolean Mode geht ja auch anders ...
>>ein 'mögen' wäre dann wie ein 'm ouml gen' und die Wörter
>>in der DB werden ja ebenso Indiziert, also jedes ouml als Wort.
>>
>>wir mögen MySQL =>> wir mögen MySQL => ouml, MySQL
>
>
> Allerdings verstehe ich dann nicht wieso z.B. die Suche nach
> "mögen" genau dieses findet? Müsste dann nicht nach "m ouml
> gen" gesucht werden? Letzteres führt nicht zum Ergebnis, ersteres
> schon. Das m als einzelner Buchstabe wird doch gar nicht
> gelistet, oder doch? Wieso wird die Kobination gefunden? Ich
> würde es gern verstehen, wenn ich auch jetzt (mit Deiner Hilfe)
> für *dieses* Projekt eine hinreichende Lösung gebastelt habe:
weil du ihm eben durch " sagst er soll genau das finden!
das geht auch mit '"ich mag"':
findet ' ... ich mag Blumen ...'
aber nicht ' ... mag ich nicht!'
hingegen 'ich mag' findet beides
(abgesehen davon das die Worte jetzt zu kurz sind ...)
> $helparray = explode (' ', $gesucht);
>
> foreach($helparray as $ding) {
>
> $vor = substr($ding,0,1);
> $vor = ($vor == "-" || $vor == "+")?$vor:"";
> $ding = ($vor == "-" || $vor == "+")?substr($ding,1):$ding;
>
> if ( $ding !== htmlentities( $ding ) ) {
>
> $ding = str_replace('*','',$ding);
> $search[] = $vor.'"'.htmlentities( $ding ).'"';
>
> } else {
>
> $search[] = $vor.$ding;
>
> }
> }
>
> $sql_suche = implode( ' ', $search );
>
> Damit habe ich die BOOLEAN-Operatoren gerettet und * in der
> Phrase ausgeschaltet (da dort nur störend und nicht nötig.
wenn du es so machst musst du aber auch " rausfiltern
weil wenn jeamdn sucht:
"mysql volltext"
hast du
""mysql" "volltext""
außerdem würde ich " nur um Wörter mit HTML-Entities machen, weil die "
eine andere Such-Methode erfordern, die meines erachtens langsamer sien
müsste.
>>da fällt einem natürlich auch gleich auf das ein Volltext-Index
>>auf einen Text mit HTML-Entities wohl ungleich größer sein wird
>>als einer ohne. Und vor allem auch viel weniger effektiv.
>
>
> An das Suchen hab ich am Anfang nicht gedacht. An diese Zeichen
> schon gar nicht. Ich wollte mit dem sofortigen Wandeln in
> HTML-Zeichen sicherstellen, dass die Ausgabe unabhängig vom
> verwendeten Zeichensatz des Systems ist. Wird vom MySQL-Server
> ein Latin1 Zeichen gegeben, aber der empfangene Rechner hat einen
> anderen am laufen, kann es zu Schwierigkeiten kommen. Bei
> westlichen Zeichen eher selten ein Problem, aber die ganzen
> osteuropäischen machen immer wieder Murx. Und: ja, ich weiß, dass
> ich z.B. im Browser den Zeichensatz bestimmen kann etc.
also ich sag einfach meinem Template System bei jedem String das er es
in HTML-Entities umwandeln soll
--
Sebastian Mendel
www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime www.sf.net/projects/phptimesheet
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive