Search without diacritics...

Search without diacritics...

am 15.07.2007 19:20:35 von Lazlo Lebrun

We do use an OsCommerce Shop with MySQL.
I have been fiddling for quite a while tryin to gat a the search with /
without diacritics to work. That means for example that my city München
should be found if a user enters "München", "Munchen" or "Muenchen".
Currently this is not the case, and foreign user's get some trouble to
find the correct characters, since OsCommerce expects to get exactly
München (with an "ü") as a search criteria.

Is this kind of fuzzy search possibly a feature from MySQL?
How to proceed?

Any help would be greatly appreciated.

Laszlo

Re: Search without diacritics...

am 15.07.2007 21:41:50 von Claus Reibenstein

Lazlo Lebrun schrieb:

> We do use an OsCommerce Shop with MySQL.

Dies hier ist eine deutschsprachige Gruppe (de). Wenn Du also etwas
wisse möchtest, schreibe bitte auf deutsch. Und wenn es unbedingt
englisch sein muss, benutze bitte ein verständliches Englisch.

Gruß. Claus

Re: Search without diacritics...

am 15.07.2007 22:00:30 von Christian Kirsch

Lazlo Lebrun schrieb:
> We do use an OsCommerce Shop with MySQL.
> I have been fiddling for quite a while tryin to gat a the search with /
> without diacritics to work. That means for example that my city München
> should be found if a user enters "München", "Munchen" or "Muenchen".
> Currently this is not the case, and foreign user's get some trouble to

Der Plural von "user" ist "users". Das da oben ist höchstens "User's
Imbisstübchen".

> find the correct characters, since OsCommerce expects to get exactly
> München (with an "ü") as a search criteria.
>

Du darfst in einer deutschsprachigen Newsgroup ruhig Deutsch posten, das
nimmt Dir niemand übel (anders als Verballhornungen des Englischen ;-).

> Is this kind of fuzzy search possibly a feature from MySQL?
> How to proceed?

Du könntest in Deiner Applikation eine Art Normierung durchführen, bevor
Du suchst. Also z.B. alle Städtenamen normal und in einer ASCII-Version
speichern, dann vor der Suche die Eingabe passend transformieren (also
aus "ue" erstmal "ü" und dann aus "ü" wieder "u" machen ...).

Das hilft dann noch nicht, wenn jemand nach "Munich" oder "Monaco" sucht.
Vielleicht kennt MySQL auch SoundEx (-> dev.mysql.com/doc,
String-Funktionen?), aber ob dass Dein Problem löst, müsstest Du
ausprobieren.

Ich halte es andererseits für durchaus zumutbar, zu Suchendes so zu
schreiben, wie es heißt - die Welt ist inzwischen ein bisserl größer als
US-ASCII...

Re: Search without diacritics...

am 15.07.2007 22:08:14 von Gregor Kofler

Lazlo Lebrun meinte:
> We do use an OsCommerce Shop with MySQL.
> I have been fiddling for quite a while tryin to gat a the search with /
> without diacritics to work. That means for example that my city München
> should be found if a user enters "München", "Munchen" or "Muenchen".
> Currently this is not the case, and foreign user's get some trouble to
> find the correct characters, since OsCommerce expects to get exactly
> München (with an "ü") as a search criteria.
>
> Is this kind of fuzzy search possibly a feature from MySQL?
> How to proceed?

Eine passende Collation vielleicht?

http://dev.mysql.com/doc/refman/5.0/en/charset-general.html

latin1 mit Collation latin1_german2 setzt zumindest ü und ue gleich. Mit
u und ü und ue wirds wohl nur was mit RLIKE o.ä.

Gruß, Gregor



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Search without diacritics...

am 16.07.2007 09:10:09 von Lazlo Lebrun

Claus Reibenstein wrote:
> Lazlo Lebrun schrieb:
>
>> We do use an OsCommerce Shop with MySQL.
>
> Dies hier ist eine deutschsprachige Gruppe (de). Wenn Du also etwas
> wisse möchtest, schreibe bitte auf deutsch. Und wenn es unbedingt
> englisch sein muss, benutze bitte ein verständliches Englisch.
>
> Gruß. Claus

Oh, Verzeihung, ich habe versehentlich 2 Newsgroups vertauscht:
In Deutsch habe ich im englischen c.d.mysql gepostet (was auch nicht
besser ist)

hallo Gruppe,

Unserer OsCommerce Shop mit MySQL ist international ausgerichtet.
Leider ist die eingebaute Suche sehr restriktiv und z. B. München wird
nur gefunden, wenn es auch "München" geschrieben wird, bei "Munchen"
oder "Muenchen" werden keine Treffer zurückgemeldet.

Ich habe vergebens nach einer Lösung innerhalb OsCommerce für dieses
Problem gesucht.

Könnte es sein, dass MySQL sowas zaubern kann?

Jede Hilfe wäre willkommen.

Laszlo

Re: Search without diacritics...

am 16.07.2007 09:21:44 von Lazlo Lebrun

Christian Kirsch wrote:

> Du darfst in einer deutschsprachigen Newsgroup ruhig Deutsch posten, das
> nimmt Dir niemand übel (anders als Verballhornungen des Englischen ;-).
>
war ein Versehen: ich habe Deutsch im englischen Forum gepostet ;-)

>> Is this kind of fuzzy search possibly a feature from MySQL?
>> How to proceed?
>
> Du könntest in Deiner Applikation eine Art Normierung durchführen, bevor
> Du suchst. Also z.B. alle Städtenamen normal und in einer ASCII-Version
> speichern, dann vor der Suche die Eingabe passend transformieren (also
> aus "ue" erstmal "ü" und dann aus "ü" wieder "u" machen ...).
>
Das habe ich versucht, eigentlich müsste man die ganze Tabelle manuell
normieren, sowie auch die Frage. Das wäre bestimt subobtimal.
eigentlich schafft es z.B. Amazon, genauso hätte ich es gerne.
Ich kann mair nicht vorstellen, dass sie ihre Datenbank ohne Umlaute
normieren.


> Ich halte es andererseits für durchaus zumutbar, zu Suchendes so zu
> schreiben, wie es heißt - die Welt ist inzwischen ein bisserl größer als
> US-ASCII...

Versuche mal nach "Garçon" zu suchen...
;-)

Re: Search without diacritics...

am 16.07.2007 09:24:56 von Lazlo Lebrun

Gregor Kofler wrote:
> Lazlo Lebrun meinte:
>> We do use an OsCommerce Shop with MySQL.
>> I have been fiddling for quite a while tryin to gat a the search with
>> / without diacritics to work. That means for example that my city
>> München should be found if a user enters "München", "Munchen" or
>> "Muenchen".
>> Currently this is not the case, and foreign user's get some trouble to
>> find the correct characters, since OsCommerce expects to get exactly
>> München (with an "ü") as a search criteria.
>>
>> Is this kind of fuzzy search possibly a feature from MySQL?
>> How to proceed?
>
> Eine passende Collation vielleicht?
>
> http://dev.mysql.com/doc/refman/5.0/en/charset-general.html
>
> latin1 mit Collation latin1_german2 setzt zumindest ü und ue gleich. Mit
> u und ü und ue wirds wohl nur was mit RLIKE o.ä.
>
> Gruß, Gregor
>
>
>
Danke Gregor,
das scheint es zu sein!
Kann man auch eine collation "a posteriori" ändern?
Wenn ja, wie?
Gruß
Laszlo

Re: Search without diacritics...

am 16.07.2007 09:27:29 von Gregor Kofler

Laszlo Lebrun meinte:

> Kann man auch eine collation "a posteriori" ändern?
> Wenn ja, wie?

Ja sicher.

Mit ALTER TABLE.

Lies doch einfach mal im Manual nach:
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

Gruß. Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Search without diacritics...

am 16.07.2007 09:39:21 von Lazlo Lebrun

Laszlo Lebrun wrote:
> Gregor Kofler wrote:
>> Lazlo Lebrun meinte:
>>> We do use an OsCommerce Shop with MySQL.
>>> I have been fiddling for quite a while tryin to gat a the search with
>>> / without diacritics to work. That means for example that my city
>>> München should be found if a user enters "München", "Munchen" or
>>> "Muenchen".
>>> Currently this is not the case, and foreign user's get some trouble
>>> to find the correct characters, since OsCommerce expects to get
>>> exactly München (with an "ü") as a search criteria.
>>>
>>> Is this kind of fuzzy search possibly a feature from MySQL?
>>> How to proceed?
>>
>> Eine passende Collation vielleicht?
>>
>> http://dev.mysql.com/doc/refman/5.0/en/charset-general.html
>>
>> latin1 mit Collation latin1_german2 setzt zumindest ü und ue gleich.
>> Mit u und ü und ue wirds wohl nur was mit RLIKE o.ä.
>>
>> Gruß, Gregor
>>
>>
>>
> Danke Gregor,
> das scheint es zu sein!
> Kann man auch eine collation "a posteriori" ändern?
> Wenn ja, wie?
> Gruß
> Laszlo

Ich glaube, ändern ist nicht nötig: so sollte die Abfrage funzen:

SELECT k COLLATE latin1_german2_ci AS k1

Re: Search without diacritics...

am 16.07.2007 09:46:55 von Claus Reibenstein

Laszlo Lebrun schrieb:

> Leider ist die eingebaute Suche sehr restriktiv und z. B. München wird
> nur gefunden, wenn es auch "München" geschrieben wird, bei "Munchen"
> oder "Muenchen" werden keine Treffer zurückgemeldet.

Wenn ich Kapitel 10.9.1 (Unicode-Zeichensätze) des deutschen Handbuchs
zu MySQL 5.1 richtig verstanden habe, sollte die Sortierfolge
utf8_unicode_ci das leisten können. Zumindest sollte 'München' und
'Muenchen' das gleiche Ergebnis liefern.

Getestet habe ich das allerdings nicht.

Gruß. Claus

Re: Search without diacritics...

am 16.07.2007 09:59:08 von Claus Reibenstein

Laszlo Lebrun schrieb:

> Kann man auch eine collation "a posteriori" ändern?

Mit ALTER DATABASE oder ALTER TABLE. Eventuell müssen die Indizes
anschließend neu generiert werden.

Gruß. Claus

Re: Search without diacritics...

am 16.07.2007 11:16:26 von Christian Kirsch

Am 16.07.2007 09:21 schrieb Laszlo Lebrun:

>> Du könntest in Deiner Applikation eine Art Normierung durchführen, bevor
>> Du suchst. Also z.B. alle Städtenamen normal und in einer ASCII-Version
>> speichern, dann vor der Suche die Eingabe passend transformieren (also
>> aus "ue" erstmal "ü" und dann aus "ü" wieder "u" machen ...).
>>
> Das habe ich versucht, eigentlich müsste man die ganze Tabelle manuell
> normieren, sowie auch die Frage.

Wieso manuell? Du musst doch eigentlich nichts weiter tun als den
oberen Teil von ISO-8859-1 auf den unteren abzubilden und außerdem aus
ue, ae bzw. oe "u", "o", und "a" machen. Das sollte sich mit einem
geeigneten Script schnell erledigen lassen. Das tust Du einmal für die
Tabelle und dann eben auch für jede Eingabe.

Oder Du mutest den Anwendern zu, die korrekte Schreibung zu verwenden.
Umlaute sind nicht irgendwie Zeichen zweiter Klasse!

> Das wäre bestimt subobtimal.
> eigentlich schafft es z.B. Amazon, genauso hätte ich es gerne.
> Ich kann mair nicht vorstellen, dass sie ihre Datenbank ohne Umlaute
> normieren.
>

Amazon halte ich mittlerweile für das denkbar schlechteste Beispiel,
was Suchen angeht. Ich bekomme dort in der Regel so viele falsche
Treffer, dass ich die richtigen dazwischen kaum noch finde.

>
>> Ich halte es andererseits für durchaus zumutbar, zu Suchendes so zu
>> schreiben, wie es heißt - die Welt ist inzwischen ein bisserl größer als
>> US-ASCII...
>
> Versuche mal nach "Garçon" zu suchen...
> ;-)

Wo? Bei Google zumindest sind die ersten Treffer durchaus korrekte
Garçons, keine garcons oder garkons oder garsons oder sowas.

--
Christian

Re: Search without diacritics...

am 16.07.2007 13:41:51 von Lazlo Lebrun

Christian Kirsch wrote:
> Am 16.07.2007 09:21 schrieb Laszlo Lebrun:
>
>>> Du könntest in Deiner Applikation eine Art Normierung durchführen, bevor
>>> Du suchst. Also z.B. alle Städtenamen normal und in einer ASCII-Version
>>> speichern, dann vor der Suche die Eingabe passend transformieren (also
>>> aus "ue" erstmal "ü" und dann aus "ü" wieder "u" machen ...).
>>>
>> Das habe ich versucht, eigentlich müsste man die ganze Tabelle manuell
>> normieren, sowie auch die Frage.
>
> Wieso manuell? Du musst doch eigentlich nichts weiter tun als den
> oberen Teil von ISO-8859-1 auf den unteren abzubilden und außerdem aus
> ue, ae bzw. oe "u", "o", und "a" machen. Das sollte sich mit einem
> geeigneten Script schnell erledigen lassen. Das tust Du einmal für die
> Tabelle und dann eben auch für jede Eingabe.
>
eigentlich würde man die Daten zweimal brauchen: einmal für die Ausgabe,
mit Umlaute, einmal für die Suche ohne Umlaute.
Die Collation ist eine gute Möglichkeit, beinhaltet jedoch nur eine
Sprache. Wenn man bunt gemischte Daten hat, mit Spanisch, Französisch
und Deutsch da ist es schon Schwierig, es sei denn man macht drei
selects mit jeweils eine andere Collation, bis ein Treffer vorkommt.

> Oder Du mutest den Anwendern zu, die korrekte Schreibung zu verwenden.
> Umlaute sind nicht irgendwie Zeichen zweiter Klasse!
>
Die Anwender sind potentielle Kunden. Sie bestimmen wie sie suchen
wollen , nicht ich.
Meine Kunden sind zu 70% aus dem angelsächsichen Raum, da gibt es keine
Umlaute auf der Tastatur.

>> Das wäre bestimt subobtimal.
>> eigentlich schafft es z.B. Amazon, genauso hätte ich es gerne.
>> Ich kann mair nicht vorstellen, dass sie ihre Datenbank ohne Umlaute
>> normieren.
>>
>
> Amazon halte ich mittlerweile für das denkbar schlechteste Beispiel,
> was Suchen angeht. Ich bekomme dort in der Regel so viele falsche
> Treffer, dass ich die richtigen dazwischen kaum noch finde.
>
Amazon sind profis. Die wissen, dass es 1000 mal besser ist 2 Treffer zu
viel anzubieten, als ein Geschäft zu verlieren, weil der Kunde nichts
gefunden hat.

>>> Ich halte es andererseits für durchaus zumutbar, zu Suchendes so zu
>>> schreiben, wie es heißt - die Welt ist inzwischen ein bisserl größer als
>>> US-ASCII...
>> Versuche mal nach "Garçon" zu suchen...
>> ;-)
>
> Wo? Bei Google zumindest sind die ersten Treffer durchaus korrekte
> Garçons, keine garcons oder garkons oder garsons oder sowas.
>
Hast du den Suchkriterium richtig mit "garçon" angegeben, oder hast Du
"garcon" gesucht?

Letzteres ist genau, was ich bräuchte.

Re: Search without diacritics...

am 16.07.2007 14:34:05 von Christian Kirsch

>>> Versuche mal nach "Garçon" zu suchen...
>>> ;-)
>> Wo? Bei Google zumindest sind die ersten Treffer durchaus korrekte
>> Garçons, keine garcons oder garkons oder garsons oder sowas.
>>
> Hast du den Suchkriterium richtig mit "garçon" angegeben, oder hast Du
> "garcon" gesucht?
>
> Letzteres ist genau, was ich bräuchte.
>

Google ist ja auch aus einem Land, wo man außer ASCII nichts meint
kennen zu müssen. Deshalb darfst Du ruhig "garcon" eingeben und
bekommst auch die Treffer für die richtige Schreibweise.

Mit "garzon", "garson", "garßon" und "garßong" funktioniert das nicht.

Dieses Verfahren dürfte an nicht-lateinischen Schriftsystemen
allerdings gnadenlos scheitern. Es sei denn, man macht es so wie
"Moskauonline": Das findet google auch, wenn man "mockba" eingibt.

Das Thema wird uns wohl noch eine Weile verfolgen.
--
Christian

Re: Search without diacritics...

am 16.07.2007 15:28:22 von Lazlo Lebrun

Christian Kirsch wrote:
>>>> Versuche mal nach "Garçon" zu suchen...
>>>> ;-)
>>> Wo? Bei Google zumindest sind die ersten Treffer durchaus korrekte
>>> Garçons, keine garcons oder garkons oder garsons oder sowas.
>>>
>> Hast du den Suchkriterium richtig mit "garçon" angegeben, oder hast Du
>> "garcon" gesucht?
>>
>> Letzteres ist genau, was ich bräuchte.
>>
>
> Google ist ja auch aus einem Land, wo man außer ASCII nichts meint
> kennen zu müssen.
Vor allenm aus einem Land, wo Umlaute auf der Tastatur nicht vorhanden sind.
Du hast auch vermutlich deshalb auch nicht "garçon" bei deiner Suche
eingegeben.

> Deshalb darfst Du ruhig "garcon" eingeben und
> bekommst auch die Treffer für die richtige Schreibweise.
>
Genau wie 70% meiner Kunden. Die 30% meiner weiteren Kunden geben
"garçon" an und sollen auch die Ergbnisse bekommen.

> Mit "garzon", "garson", "garßon" und "garßong" funktioniert das nicht.
>
Genau wie 0% meine Kunden. G.W. Bush hat bei mir nocht nicht zu
bestellen versucht. ;-)

> Dieses Verfahren dürfte an nicht-lateinischen Schriftsystemen
> allerdings gnadenlos scheitern. Es sei denn, man macht es so wie
> "Moskauonline": Das findet google auch, wenn man "mockba" eingibt.
>
Hättest du "Москва" eingegeben?
Mag sein, interessiert mich auch nicht. Ich habe schon mit o.g. 2 ersten
Fälle 100% meiner Kunden erreicht.


> Das Thema wird uns wohl noch eine Weile verfolgen.