phpbar.de logo

Mailinglisten-Archive

HTML-Entities in der Volltextsuche

HTML-Entities in der Volltextsuche

Sebastian Mendel lists at sebastianmendel.de
Die Dez 14 11:11:59 CET 2004


Torsten Berger - WahnBerlin schrieb:
> Hallo,
> 
> es ist wohl wirklich ein Fehler in MySQL. Ich hab noch ein wenig
> rumprobiert und nun mal meine Suchworte in Anführungszeichen
> (also als mehrere Phrasen) gesetzt:

naja musst du doch, wie sollte es sonst gehen? schließlich sind 
normalerweise & und ; keine Wortzeichen, werden also von MySQL als 
Trenner behandelt

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

steht also nur 'ouml' und 'MySQL' im Index

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.


>  SELECT n.ID AS id, n.top_content_ID, n.titel, n.teaser
>  FROM news AS n
>  WHERE n.status = 'online'
>  AND n.von_datum <= NOW()
>  AND n.bis_datum >= NOW()
>  AND MATCH(n.titel,n.teaser,n.text)
>  AGAINST ('"m&ouml;gen" "Wort"' IN BOOLEAN MODE)
>  LIMIT 26
> 
> Das funktioniert, also nun wird nur noch "mögen" gefunden nicht
> mehr ein alleiniges ö. Allerdings habe ich nun versucht auch das
> "-" (nicht vorhanden) und das "+" (vorhanden) mit einzubeziehen,
> das führt wieder zu Fehlern:

mhm ... und AGAINST ('"m&ouml;gen"' IN BOOLEAN MODE) funktioniert nicht?


> Ein Plus funktioniert, auch in Kombination mit anderen Worten.
> Das Problem ist das Minus: stelle ich vor das "m&ouml;gen" ein
> Minus, werden wieder *alle* Texte rausgefiltert, die irgendwo ein
> ö enthalten, da nutzt dann auch das setzen in Anführungszeichen
> nichts mehr.

was hast du denn probiert?

   AGAINST ('-"m&ouml;gen" +Wort' IN BOOLEAN MODE)
oder
   AGAINST ('"-m&ouml;gen" +Wort' IN BOOLEAN MODE)


> Alles sehr mysteriös. Ich werde nun das kleinere Übel wählen und
> nur eine Suche nach "muss vorhanden sein" ermöglichen und dabei
> die einzelnen Suchworte als einzelne Phrasen übergeben.

du kannst ja überprüfen ob du HTML-Entities im wort hast

   if (  $string !== htmlentities( $string ) )
     $search[] = '"' . htmlentities( $string ) . '"';

'AGAINST (\'' . implode( ' ', $search ) . '\' IN BOOLEAN MODE)'

AGAINST ('"m&ouml;gen" Wort' IN BOOLEAN MODE)


-- 
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