Frage

Ich muss ein Content -Management -System hacken, um die FullText -Suche nach einer Sprache zu unterstützen, die Sonderzeichen enthält. Diese werden in der Datenbank als HTML -Entitäten gespeichert. Aus dem Box unterstützt das CMS es nicht. Der Fehler wurde vor langer Zeit gemeldet, aber anscheinend hat er keine Priorität. Ich halte mich an dieses CMS, der Kunde wartet auf meine Lösung, also muss ich ihn hacken. Verdammt...

OK ... Das CMS speichert seinen Inhalt, indem sie Sonderzeichen in HTML -Entitäten übersetzen (dies wird vom gebündelten Editor tatsächlich durchgeführt). Das deutsche Wort "Möchen" wird also in der DB "Möchen". Das CMS erstellt eine Abfragezeichenfolge wie

SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);

Die Tabelle ist vom Typ MyISAM, das Feld hat einen FullText -Index.

Wenn Sie "Möchten" als Suchzeichenfolge verwenden, passt MySQL zu jeder Seite und einem Bediener, der verrückte Dinge tut, wenn sie in der Suchzeichenfolge vorhanden ist. Die Suche wird nicht funktionieren.

Die nächste Idee besteht darin, den speziellen Charakter durch einen * als Platzhalter zu ersetzen. Dies wird aber auch mit mehreren Wörtern übereinstimmen, sobald Sie etwas mit einem "M" und einem weiteren folgenden Wort, das mit einem "Chten" endet, beginnt. Ich weiß nicht warum, aber nur das Ampersand durch ein Sternchen (so dass die Suche nach "m*oUt; chten") auch zu ähnlichen Ergebnissen führt.

Das gleiche Problem wurde beschrieben hier.

Ok, Leute, ich brauche deine Hilfe! Irgendwelche Ideen?

Bearbeiten: Das Konvertieren des Inhalts in UTF-8 ist keine Option.

Vielen Dank!
Craesh

War es hilfreich?

Lösung

Warum verwenden Sie HTML -Entitäten? Wechseln Sie einfach zu UTF8.

Versuchen Sie ansonsten, Ihre Suchzeichenfolge noch einmal wie ('"Search"') zu zitieren.Leider wird nicht funktionieren - http://bugs.mysql.com/bug.php?id=26265 Es gibt einen langen Fehler. Ich denke, der einzige Ansatz ist:

Der letzte Ansatz besteht darin, zusätzliche Spalte nur für Suchzwecke zu speichern, wenn alle Akzente ersetzt werden.

Andere Tipps

Sie können eine Volltext-Search-Engine verwenden. Apache Lucene ist mächtig, aber ein bisschen schwer zu lernen. Apache Solr ist viel einfacher zu lernen und kann sehr nützlich sein. Sphinx ist bekannt für seine einfache Integration in MySQL. Ich glaube, alle von ihnen umgehen gut mit der Internationalisierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top