Einzelne Zeichen bei einer Suche ignorieren
Matthew
- mysql
- regex
- suche
Hallo Zusammen,
Ist es möglich per regex bestimmte Zeichen zu deklarieren, welche an beliebiger Stelle zwischen den Daten evtl. enthalten sind, um diese bei einer Suche zu ignorieren (so als würden sie gar nicht existent)?
Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.
Gruß Matthew
hallo
Hallo Zusammen,
Ist es möglich per regex bestimmte Zeichen zu deklarieren, welche an beliebiger Stelle zwischen den Daten evtl. enthalten sind, um diese bei einer Suche zu ignorieren (so als würden sie gar nicht existent)?
Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.
Apfel-?wein
Apfel-?wein
Wenn aber unbekannt ist an welcher Position in den zu durchsuchenden Daten das Zeichen evtl. Vorkommt!? Das Beispiel ist da natürlich etwas unglücklich gewählt, aber es könnte quasi auch "A-pfelwein" oder "Apfelwe-in" vorkommen.
Es müsste also Heißen: Suche nach "Apfelwein" und ignoriere jegliche eventuelle Vorkommen von "-" an beliebiger Position.
@@Matthew
Apfel-?wein Wenn aber unbekannt ist an welcher Position in den zu durchsuchenden Daten das Zeichen evtl. Vorkommt!? Das Beispiel ist da natürlich etwas unglücklich gewählt, aber es könnte quasi auch "A-pfelwein" oder "Apfelwe-in" vorkommen.
Es müsste also Heißen: Suche nach "Apfelwein" und ignoriere jegliche eventuelle Vorkommen von "-" an beliebiger Position.
A-?p-?f-?e-?l-?w-?e-?i-?n
LLAP 🖖
Hallo Gunnar Bittersmann,
A-?p-?f-?e-?l-?w-?e-?i-?n
/A-?p-?f-?e-?l-?w-?e-?i-?n/i 😉
Bis demnächst
Matthias
Schade... hatte gehofft man könnte es eleganter Lösen, indem man das zu ignorierende Zeichen einfach „irgendwie“ vor oder nach dem Suchstring deklariert, um diesen nicht zerlegen zu müssen. 😟
Hello,
Schade... hatte gehofft man könnte es eleganter Lösen, indem man das zu ignorierende Zeichen einfach „irgendwie“ vor oder nach dem Suchstring deklariert, um diesen nicht zerlegen zu müssen. 😟
Es ist ja noch schlimmer, als Du denkst ;-)
Wenn Du die regex-Maschine benutzen willst, kannst Du nicht einfach nur den Suchstring aufbereiten, wie gezeigt, sondern musst auch noch dafür sorgen, dass er keine regex-Steuerzeichen enthält, bzw. musst diese vorher escapen.
Liebe Grüße
Tom S.
Hello,
Du könntest einen eigenen Algorythmus dafür aufbauen:
Da sich hierbei um lineare Operationen handelt bzw. welche, die der Prozessor bereirs unterstützt (Stringvergleich), sollte das auch sehr schnell ablaufen.
Liebe Grüße
Tom S.
Hallo,
do-undo Technik? Ist wohl unnötig.
Wenn es nur ein Zeichen ist - REPLACE(variable, "-", "")) = "Apfelwein"
- und wenn Du Besonderheiten wegen Groß- und Kleinschreibung hast, dann ist die Lösung in MYSQL nicht die LOWER() Funktion, sondern die COLLATE Klausel.
Bei 2 - 3 Zeichen kann man REPLACE schachteln.
Wenn es viele Zeichen sind, wird es mühsam. Ab MYSQL 8 gibt es REGEX_REPLACE, da kannst Du über eine Regex die zu eliminierenden Zeichen angeben.
Rolf
Hello,
Hallo,
do-undo Technik? Ist wohl unnötig.
Wenn es nur ein Zeichen ist -
REPLACE(variable, "-", "")) = "Apfelwein"
- und wenn Du Besonderheiten wegen Groß- und Kleinschreibung hast, dann ist die Lösung in MYSQL nicht die LOWER() Funktion, sondern die COLLATE Klausel.Bei 2 - 3 Zeichen kann man REPLACE schachteln.
Wenn es viele Zeichen sind, wird es mühsam. Ab MYSQL 8 gibt es REGEX_REPLACE, da kannst Du über eine Regex die zu eliminierenden Zeichen angeben.
Das hängt ganz davon ab, was die Suche leisten muss. Wenn auch die Position des Suchtextes im Originaltext gesucht wird (z. B. zum Markieren), dann wird man es so ähnlich lösen können, wie ich beschrieben habe. Regex sind da zu teuer.
Ich habe auch bewusst erstmal das DBMS rausgelassen, da das auf den eigentlichen Algorythmus keinen wesentlichen Einfluss hat.
Liebe Grüße
Tom S.
Hallo TS,
Algorythmus
Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.
Bis demnächst
Matthias
Hallo Matthias
Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.
Algorithmus kommt von Abu Dschaʿfar Muhammad ibn Musa al-Chwārizmī, hat aber wirklich nichts mit Rhythmus zu tun. ;-)
Viele Grüße,
Orlok
Hallo Orlok,
Hallo Matthias
Algorithmus kommt von αριθμός (arithmós = Zahl) und hat nichts mit Rhythmus zu tun.
Algorithmus kommt von Abu Dschaʿfar Muhammad ibn Musa al-Chwārizmī
Ja, sein lateinisierter Name Algorismi ist eine Verballhornung seines Namens angelehnt an αριθμός (arithmós = Zahl).
Algorismus
Bis demnächst
Matthias
Hello,
ich wollte Dir doch nur eine Freude bereiten. ;-D
Liebe Grüße
Tom S.
Tach!
Beispiel: Suche nach "Apfelwein" und ignoriere dabei "-", so das auch der in den Daten vorhandene "Apfel-Wein" gefunden werden kann.
Ersetze das -
oder auch alle anderen ungewünschten Zeichen durch nichts und vergleiche dann mit dem Suchwort.
Solche Suchen, bei denen erst der Feldinhalt berechnet werden muss, sind aber teuer, weil nicht durch Index abkürzbar.
dedlfix.
Hallo dedlfix,
Solche Suchen, bei denen erst der Feldinhalt berechnet werden muss, sind aber teuer, weil nicht durch Index abkürzbar.
Naja. Man könnte eine generated column verwenden und darauf einen Index legen. Ist unschön, aber wenn man es braucht, dann braucht man es.
PostgreSQLs indexes on expressions wären da natürlich schöner.
LG,
CK