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