AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Volltextsuche in Blob möglichst schnell
Thema durchsuchen
Ansicht
Themen-Optionen

Volltextsuche in Blob möglichst schnell

Ein Thema von Teekeks · begonnen am 26. Jun 2011 · letzter Beitrag vom 27. Jun 2011
Antwort Antwort
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 20:42
Nun, es gibt fest 5 Gruppen.
Die Anzahl der Suchbegriffe variiert jedoch von Gruppe zu Gruppe und auch von Fall zu Fall.

Wie funktioniert sowas mit Volltextindex?
Hast du da vl auch etwas Lektüre damit ich mich da einlesen kann?
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 20:46
Beim Volltextindex werden die Wörter in einer Wortliste geführt. Und dann die Zuordnungen jedes Dokumentes zu den Wörtern

Siehe auch #5
Markus Kinzler
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 21:22
Ahh!
Das klingt gut (womit wir wieder beim Anfang des Themas wären ^^).
Damit werde ich mich mal Beschäftigen.
Und diese Liste kann ich noch weiter verkleinern indem ich z.B. klein geschriebene Wörter nicht mit Indiziere (es geht immer nur um Nahrungsmittel, die werden ja alle Groß geschrieben) und jedes Wort nur 1x vorkommen lasse je Text.
Ich werde mir das mal genau ansehen!

Danke für deine Hilfe!

Gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 21:25
Du kannst die Sache aus nicht casesensitiv machen
Markus Kinzler
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#5

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 21:43
Beim Volltextindex werden die Wörter in einer Wortliste geführt. Und dann die Zuordnungen jedes Dokumentes zu den Wörtern

Siehe auch #5
Und ich dachte, ein Volltextindex ist was waahnsinnig komplex-kompliziertes, was entweder fest in einer DB untergebracht ist, oder nicht. Und wenn nicht, guckt man dumm aus der Wäsche.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 21:55
Manche DBMS unterstützen das von Haus aus. Rein technisch wird es aber ähnlich gelöst
Markus Kinzler
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 23:31
Ich habe das ganze so verstanden das in einer Tabelle Alle (unterschiedlichen) Wörter aller Texte mit einem Verweis auf den jeweiligen Text gespeichert werden.
Jetzt legt man einen Index auf beides und schon kann man sehr schnell herausfinden ob ein bestimmtes Wort in einem Text vorkommt.
Das ist vermutlich nicht ganz das was normalerweise gemacht wird, aber das wäre genau das was ich benötige.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 05:28
Nein nicht ganz, in einer Tabelle stehen die möglichen Wörter in einer 2. die Zuordnungen zu den Textfeldern mit z.B. der Position im Text.
Willst du nun herausfinden, ob ein Wort in einem Text vorkommt, musst du nur Abfragen, ob mindestens eine Zuordnung wischen dem Text und dem Wort besteht.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 07:53
Hier ist eine schöne Aufstellung, wann man mit FB BLOB oder Varchar benutzen kann/soll, allerdings auf Englisch.
http://www.volny.cz/iprenosil/interbase/ip_ib_strings.htm

Zur max. Länge bei Varchar, es kommt neben der FB-Version vermutlich auf den Charset an und evtl. auch auf 32/64bit System. Gerade bei BLOB und der Anforderung maximaler Größe macht es ja auch Sinn, die "Breite" des Systems auszunutzen. Beim Multibyte Charset wäre die Frage, ob es 2 Byte, 3 oder 4 sein müssen. (UTF8, Unicode usw.)
Aber ein Rezept für 1000 jährige Eier in Kantonesisch hat sicher seinen optischen Reiz.

Noch eine Varchar Variante (eignet sich für "einfache DB" und kombiniert BLOB Vorteil GROSS mit Varchar Vorteil INDEX usw)
Der Text wird in "mundgerechte" Stücke zerteilt. Eine separate Tabelle nimmt dann je Text die ID des Rezeptes sowie die Datensätze auf, die aus einer passenden Stückelung resultieren.
Die Spaltendefinition ist z.B. Varchar(100). Mit einer SP wird der Text angenommen und dann in ca 100 Zeichen Teilen eingefügt, immer abgetrennt nach dem letzten Wort, das noch rein passt. Als Variante könnte man auch eine Trennung nach Absätzen oder so machen (also CR/LF, Satzende, Halbsatz (Komma)..). Dann muss die Varcharspalte natürlich doch möglichst groß sein.
Je nach Verfahren bekommst Du dann bei der Abfrage automatisch noch die Satz oder Absatz Nummer ausgegeben, wenn Du einen entsprechenden Zusatzschlüssel für die Zeilen verwendest. Den kann man evtl. zur Visualisierung verwenden.
Gruß, Jo

Geändert von jobo (27. Jun 2011 um 07:55 Uhr) Grund: Korrektur
  Mit Zitat antworten Zitat
Morphie

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 07:53
Wie würdet ihr denn so eine Indizierung realisieren?
Ich habe es bis jetzt so gemacht, dass ich zwei Trigger in einer Tabelle habe:

1. wird bei DELETE ausgelöst. Hier werden dann die Datensätze in der Index-Tabelle gelöscht. (könnte man wohl auch anders lösen, z.B. über Fremdschlüssel / Referentielle Integrität)

2. wird beim UPDATE / INSERT geprüft, ob sich der Text im Blob-Feld geändert hat. Wenn ja werden die Einträge aus der Index-Tabelle gelöscht. Danach wird der Text aus dem Blob in einzelne Wörter aufgeteilt und wieder in die Index-Tabelle geschrieben.

Hier würde mich speziell interessieren, mit welchem Code ihr Punkt 2 lösen würdet. Oder ob ihr generell einen anderen Weg gehen würdet...
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz