Thema: Delphi Ganzes Wort suchen

Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Ganzes Wort suchen

  Alt 21. Sep 2009, 12:37
Der Aufwand ist immer abhängig von der Datenmenge. Für eine 60GB Datenbank brauchst du andere Techniken als für eine 60 MB Datenbank.
Bei der kleinen reicht immer die Auswertung über integrierte Funktionen zu machen, da gibt es diverse Stringvergleiche
siehe hier: http://www.firebirdsql.org/refdocs/l...-position.html
Die Position Funktion ist case sensitive.

Das problem mit den trennzeichen kannst du serverseitig am besten so lösen, das du neben dem originaltext noch eine verdichtete version mit fixem Worttrenner schreibst, in dem alle sonderzeichendurch den trenner ersetzt werden und zum Beispiel nur noch A-Z und 0-9 vorkommen, dabei kannst du dann auch das verhalten für äöüß selbst festlegen (zum Beispiel ersetzen durch aeoeuesz oder einfach aous). Das kann dein client machen oder alternativ auch auf dem Server als service laufen. Das kann man dann auch für große Datenbanken (siehe oben) gut gebrauchen. Wenn es extrem schnell reagieren soll kann man das ganze noch in den Arbeitsspeicher packen, ist aber meist nicht notwendig.

Die Wortliste auflösen in Wort, Dokument, und WortDokument Tabelle hatten wir mal gemacht, da waren wir aufgrund der Datenmengen aber doch an Grenzen gekommen, die den Overhead nicht mehr rechtfertigen. Das ergibt bei größeren Datenbanken shcnell mal einige Milliarden Datensätze in der Verbindungtabelle.

Wir haben einfach die eindeutige Wortliste verdichtet und sortiert mit trenner im Extra Blob gespeichert.

beispiel:

SQL-Code:
original text:
Willkommen in der freundlichen Community rund um Embarcaderos/CodeGears Entwicklertool "Delphi". Unser Ziel ist es, eine Diskussionsplattform für den Gedankenaustausch zwischen Menschen zu schaffen, die sich beruflich oder privat mit Delphi befassen (müssen oder wollen *g*). In unserem Archiv mit über 965.000 Beiträgen findet sich für fast jedes Problem eine Lösung.

Verdichtung 1 für Wortreihenfolge casesensitive:
Willkommen#in#der#freundlichen#Community#rund#um#Embarcaderos#CodeGears#Entwicklertool#Delphi#Unser#Ziel#ist#es#eine#Diskussionsplattform#
für#den#Gedankenaustausch#zwischen#Menschen#zu#schaffen#die#sich#beruflich#oder#privat#mit#Delphi#befassen#müssen#oder#wollen#In#unserem#
Archiv#mit#über#965000#Beiträgen#findet#sich#für#fast#jedes#Problem#eine#Lösung#

Verdichtung 2 für wortexistenz non casesensitive mit ersetzung umlaute
965000#ARCHIV#BEFASSEN#BEITRAEGEN#BERUFLICH#COEDEGEARS#COEMMUNITY#DELPHI#DELPHI#DEN#DER#DIE#DISKUSSIOENSPLATTFOERM#EINE#EINE#EMBARCADEROES#
ENTWICKLERTOEOEL#ES#FAST#FINDET#FREUNDLICHEN#FUER#FUER#GEDANKENAUSTAUSCH#IN#IN#IST#JEDES#LÖSUNG#MENSCHEN#MIT#MIT#MUESSEN#OEDER#OEDER#PRIVAT#
PROEBLEM#RUND#SCHAFFEN#SICH#SICH#UM#UNSER#UNSEREM#WILLKOEMMEN#WOELLEN#ZIEL#ZU#ZWISCHEN#UEBER#
Das rechnet sich aber erst bei richtig großen Datenbanken, aber damit durchsuchen wir beim Kunden diverse Gigabyte und haben sehr schnell Ergebnisse.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat