Suche mit Umlauten und Umschreibung
Suche mit Umlauten und Umschreibung
am 18.07.2007 17:21:36 von Martin Wagner
Hallo Gruppe,
ich hätte eine kurze Frage zur Suche nach Umlauten in Textfeldern (VARCHAR)
in. Gibt es eine gute Möglichkeit nach Umlauten und deren Umschreibung
zugleich zu suchen?
Beispielsweise bei einer Namenstabelle mit folgenden Einträgen:
+---------+
| Name |
+---------+
| Mueller |
| Müller |
+---------+
Dabei sollten sowohl bei Suche nach 'Müller' als auch nach 'Mueller' beide
Einträge gefunden werden.
Das einzige was mir einfiele, wäre jeweils die verschiedenen Möglichkeiten
automatisch zu erzeugen und in die Abfrage einzubinden:
> SELECT * FROM Namen WHERE name = 'Müller' OR name = 'Mueller';
Wenn nun aber mehrere Umlaute in einem Wort (oder Satz) hat, bekommt man
eine exponentielle Anzahl an Möglichkeiten die man generieren und in den
Query einfügen müsste. Gibt es hier elegantere Möglichkeiten, evtl. von
MySQL selbst bereit gestellt?
Viele Grüße,
Martin
Re: Suche mit Umlauten und Umschreibung
am 18.07.2007 18:18:35 von Christian Kirsch
Am 18.07.2007 17:21 schrieb Martin Wagner:
> Hallo Gruppe,
>
> ich hätte eine kurze Frage zur Suche nach Umlauten in Textfeldern (VARCHAR)
> in. Gibt es eine gute Möglichkeit nach Umlauten und deren Umschreibung
> zugleich zu suchen?
>
Dazu gab's doch gerade einen Thread.
> Beispielsweise bei einer Namenstabelle mit folgenden Einträgen:
> +---------+
> | Name |
> +---------+
> | Mueller |
> | Müller |
> +---------+
>
> Dabei sollten sowohl bei Suche nach 'Müller' als auch nach 'Mueller' beide
> Einträge gefunden werden.
>
REGEXP könnte Dir helfen
> Das einzige was mir einfiele, wäre jeweils die verschiedenen Möglichkeiten
> automatisch zu erzeugen und in die Abfrage einzubinden:
>
>> SELECT * FROM Namen WHERE name = 'Müller' OR name = 'Mueller';
>
REGEXP könnte dir helfen
> Wenn nun aber mehrere Umlaute in einem Wort (oder Satz) hat, bekommt man
> eine exponentielle Anzahl an Möglichkeiten die man generieren und in den
> Query einfügen müsste. Gibt es hier elegantere Möglichkeiten, evtl. von
> MySQL selbst bereit gestellt?
Eventuell steht sowas sogar im Handbuch. Du findest es bei
dev.mysql.com/doc Allerdings kannst Du sowas m.E. nicht nur mit den
Mitteln von MySQL lösen. Die Applikation muss halt den Suchstring
passend aufbereiten.
--
Christian
Re: Suche mit Umlauten und Umschreibung
am 18.07.2007 19:12:11 von Martin Wagner
Am Wed, 18 Jul 2007 18:18:35 +0200 schrieb Christian Kirsch:
> Dazu gab's doch gerade einen Thread.
Ja, hatte ich übersehen, die Artikelliste war noch nicht aktualisiert.
> REGEXP könnte Dir helfen
Stimmt, danke für den Pointer.
Grüße,
Martin
Re: Suche mit Umlauten und Umschreibung
am 18.07.2007 19:23:00 von Axel Schwenke
Martin Wagner wrote:
>
> ich hätte eine kurze Frage zur Suche nach Umlauten in Textfeldern (VARCHAR)
> in. Gibt es eine gute Möglichkeit nach Umlauten und deren Umschreibung
> zugleich zu suchen?
>
> Beispielsweise bei einer Namenstabelle mit folgenden Einträgen:
> +---------+
> | Name |
> +---------+
> | Mueller |
> | Müller |
> +---------+
>
> Dabei sollten sowohl bei Suche nach 'Müller' als auch nach 'Mueller' beide
> Einträge gefunden werden.
>
> Das einzige was mir einfiele, wäre jeweils die verschiedenen Möglichkeiten
> automatisch zu erzeugen und in die Abfrage einzubinden:
>
>> SELECT * FROM Namen WHERE name = 'Müller' OR name = 'Mueller';
>
> Wenn nun aber mehrere Umlaute in einem Wort (oder Satz) hat, bekommt man
> eine exponentielle Anzahl an Möglichkeiten die man generieren und in den
> Query einfügen müsste. Gibt es hier elegantere Möglichkeiten, evtl. von
> MySQL selbst bereit gestellt?
Die kanonische Lösung ist, für jede mehrdeutige Kombination eine
Basisform zu definieren (z.B. {'ü', 'ue', 'ü'} => 'ue') und die
zusätzlich zu den "richtigen" Daten abzuspeichern. Für die Suche wird
dann das Suchwort genauso transformiert und in den transformierten
Daten gesucht. Wenn man für die Transformation eine Stored Function
schreibt und die transformierte Spalte mit einem Trigger in Schuß
hält, ist das sogar recht komfortabel hinzubekommen.
Als weiteren Nebeneffekt kann man so auch nichtindizierbare (bzw. von
normalen Volltext-Suchen ignorierte) Begriffe wie 'C++' oder 'AS/400'
suchen lassen.
XL
Re: Suche mit Umlauten und Umschreibung
am 19.07.2007 08:36:13 von Lazlo Lebrun
Martin Wagner wrote:
> Hallo Gruppe,
>
> ich hätte eine kurze Frage zur Suche nach Umlauten in Textfeldern (VARCHAR)
> in. Gibt es eine gute Möglichkeit nach Umlauten und deren Umschreibung
> zugleich zu suchen?
>
> Beispielsweise bei einer Namenstabelle mit folgenden Einträgen:
> +---------+
> | Name |
> +---------+
> | Mueller |
> | Müller |
> +---------+
>
> Dabei sollten sowohl bei Suche nach 'Müller' als auch nach 'Mueller' beide
> Einträge gefunden werden.
>
> Das einzige was mir einfiele, wäre jeweils die verschiedenen Möglichkeiten
> automatisch zu erzeugen und in die Abfrage einzubinden:
>
>> SELECT * FROM Namen WHERE name = 'Müller' OR name = 'Mueller';
>
> Wenn nun aber mehrere Umlaute in einem Wort (oder Satz) hat, bekommt man
> eine exponentielle Anzahl an Möglichkeiten die man generieren und in den
> Query einfügen müsste. Gibt es hier elegantere Möglichkeiten, evtl. von
> MySQL selbst bereit gestellt?
>
> Viele Grüße,
> Martin
Wie schon im anderen Thread geschrieben:
SELECT ... WHERE ... = ... COLLATE latin1_german2_ci sollte es tun.
http://dev.mysql.com/doc/refman/4.1/en/string-comparison-fun ctions.html
Gruß
Laszlo