AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FB Suche laut DIN5007-2 (ä=ae)
Thema durchsuchen
Ansicht
Themen-Optionen

FB Suche laut DIN5007-2 (ä=ae)

Ein Thema von hoika · begonnen am 5. Apr 2013 · letzter Beitrag vom 5. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 06:40
Datenbank: FB • Version: 2 • Zugriff über: egal
Halo #,

ich suche eine Möglichkeit nach der Vorschrift DIN5007-2 zu suchen,
d.h.

Müller-Ölbrig
Müller-Oelbrig
Mueller-Ölbrig
Mueller-Oelbrig

sind identisch.
es gilt ä=ae, ö=oe, ü=ue.

Lokal geht es einfach über StringReplace und Uppercase,
aber direkt per Select * From Where ?.

Es geht hier wohlgemerkt nicht um Sortierung (LATIN II oder so ähnlich),
sondern um das suchen, Hinweise auf Collations und Charsets nützen mir also (wahrscheinlich) nichts.

Natürlich könnte ich auch alle möglichen Schreibweisen des Wortes ermitteln (so wie ich es ja oben schon gemacht habe)
und dann per IN suchen.

Mein aktueller Ansatz ist lokal zu suchen (es werden noch andere Felder im Where benutzt),
ist also kein Full-Table-Scan.

Ich könnte mir auch eine UDF bauen, das wollte ich allerdings vernmeiden.


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 06:54
Sollte mit regulären Ausdrücken möglich sein.
Markus Kinzler
  Mit Zitat antworten Zitat
KarstenK

Registriert seit: 4. Dez 2007
Ort: Bärenthal
29 Beiträge
 
Delphi 2009 Enterprise
 
#3

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 07:20
Mein Vorschlag eine extra Spalte in der DB mit dem Inhalt Mueller-Oelbrig , also mit Umgewandelten Umlauten, anlegen und nur in der suchen.
Aternativw habe ich mal eine zweite Spalten mit dem phonetischen Code angelegt und auch darin gesucht. Findet dann auch Meier und Maier.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#4

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 08:53
Lokal geht es einfach über StringReplace und Uppercase,
aber direkt per Select * From Where ?.
Replace und Upper gibt es doch auch in Firebird-SQL...

Ich könnte mir auch eine UDF bauen, das wollte ich allerdings vernmeiden.
Aber der Anwendungsfall schreit ja förmlich nach einer UDF...

Mein Vorschlag eine extra Spalte in der DB mit dem Inhalt Mueller-Oelbrig , also mit Umgewandelten Umlauten, anlegen und nur in der suchen.
Das würde ich nicht machen... Stell dir vor irgendwann kommt man auf die Idee noch in 10 weiteren Feldern suchen zu wollen... willst du die dann alle redundant abspeichern?
Eventuell wäre der Umweg über eine Volltextsuche mit redundanten (umgewandelten) Einträgen besser...

Geändert von Morphie ( 5. Apr 2013 um 08:55 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 09:12
willst du die dann alle redundant abspeichern?
Redundanz ist der Preis für Performance.
Zitat:
Eventuell wäre der Umweg über eine Volltextsuche mit redundanten (umgewandelten) Einträgen besser...
Da liegen die Texte auch redundant vor.

Wenn Firebird die DIN5007-2 Suche nicht anbietet, und man schnell suchen will, muss man wohl oder übel eine separate Spalte einführen, da die Lösungen mit UDF und RegEx keinen Index benutzen können.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#6

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 09:24
willst du die dann alle redundant abspeichern?
Redundanz ist der Preis für Performance.
Zitat:
Eventuell wäre der Umweg über eine Volltextsuche mit redundanten (umgewandelten) Einträgen besser...
Da liegen die Texte auch redundant vor.
Da hast du meine volle Zustimmung, allerdings würde man bei einer Volltextsuche nicht jede Spalte doppeln, sondern nur redundante (umgewandelte) Werte in den Volltextindex eintragen. Die Erweiterung auf weitere Felder wäre somit viel einfacher und vom Tabellenaufbau unabhängig / sinnvoller.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 09:28
...allerdings würde man bei einer Volltextsuche nicht jede Spalte doppeln, sondern nur redundante (umgewandelte) Werte in den Volltextindex eintragen.
Wie? Nö. Die Spalte, so wie sie ist, kommt in den VT-Index. Natürlich wird hier verdichtet, d.h. mehrfach vorkommene Wörter werden nur einmal abgelegt.

Aber, wir sind uns einig: Eine Volltextsuche muß her!

Geändert von Furtbichler ( 5. Apr 2013 um 09:46 Uhr)
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#8

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 10:00
Ich setze eine Firebird-Volltextsuche immer so um, dass ich eine weitere Tabelle mit folgenden Feldern anlege:
ID
QuellTabelle
QuellFeld
QuellID
Wort

den eigentlichen Daten-Tabellen füge ich dann Trigger hinzu, die mir bei jeder Änderung/Neuanlage die entsprechenden Wörter aus allen relevanten Feldern in die Index-Tabelle schreiben.
Alternativ kann man auch einen Index-Dienst auf dem Server laufen lassen, der die Indizierung in einem x-beliebigen Intervall übernimmt... (hat einen Performancevorteil bei großen Batch-Imports)

So habe ich quasi für beliebig viele Tabellen mit beliebig vielen Spalten nur eine einzige Index-Tabelle mit der ich dann gezielt nach einzelnen Wort/Tabelle/Feld-Kombinationen suchen kann.

Ich bin sogar mal so weit gegangen, dass ich über die SYS$-Tabellen alle Textfelder für eine Tabelle abgefragt und diese automatisch indiziert habe. So muss man den Trigger bei neuen Textfeldern auch nicht mehr pflegen, da er sowieso alle Textfelder (Varchar, Char, Blob Text,...) indiziert.

Das Modell klappt bis jetzt ganz gut

Wenn man den Trigger, der für die Indizierung zuständig ist, jetzt so manipuliert, dass er zusätzlich zu den normalen Wörtern auch alle umgewandelten Wörter indiziert, braucht man also keine redundanten Spalten anlegen und kann nach belieben nach Müller oder nach Mueller suchen
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 10:05
So habe ich quasi für beliebig viele Tabellen mit beliebig vielen Spalten nur eine einzige Index-Tabelle mit der ich dann gezielt nach einzelnen Wort/Tabelle/Feld-Kombinationen suchen kann.
Das wird aber bei großen Datenmengen sehr schnell zum Flaschenhals. Zudem ist das so nicht direkt ein Volltextindex, sondern nur eine Hilfe für eine Suche nach Token/Wörtern. Nicht schlecht, aber eben kein VT. Verwende deine Methode mal zum Indexieren von langen Texten (sagen wir: 1 Mio Dokumente)...

EDIT: Aber für diesen Zweck hier durchaus ausreichend...

Ich würde eine ausgereifte (Open Source?) Lösung nehmen. Beim Googeln habe ich einige Lösungen gesehen, die auf der Lucene-Engine basieren (die es auch für Delphi gibt): Das wäre in jedem Fall eine guter Anfang.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#10

AW: FB Suche laut DIN5007-2 (ä=ae)

  Alt 5. Apr 2013, 10:07
Gut, damit habe ich noch keine Erfahrungen. Wie gesagt, bis jetzt reicht mir diese Lösung voll aus...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz