![]() |
AW: Volltextsuche in Blob möglichst schnell
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. |
AW: Volltextsuche in Blob möglichst schnell
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. |
AW: Volltextsuche in Blob möglichst schnell
Hier ist eine schöne Aufstellung, wann man mit FB BLOB oder Varchar benutzen kann/soll, allerdings auf Englisch.
![]() 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. |
AW: Volltextsuche in Blob möglichst schnell
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... |
AW: Volltextsuche in Blob möglichst schnell
Zitat:
Code:
liefert einen Datensatz
select 1 as wert from rdb$database
union select 1 as wert from rdb$database
Code:
liefert 2 Datensätze
select 1 as wert from rdb$database
union all select 1 as wert from rdb$database |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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