phpbar.de logo

Mailinglisten-Archive

HTML-Entities in der Volltextsuche

HTML-Entities in der Volltextsuche

Sebastian Mendel lists at sebastianmendel.de
Mit Dez 15 13:41:29 CET 2004


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 " raus filtern

weil wenn jemand 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 sein 
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