AGB  ·  Datenschutz  ·  Impressum  







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

Volltextsuche in Blob möglichst schnell

Ein Thema von Teekeks · begonnen am 26. Jun 2011 · letzter Beitrag vom 27. Jun 2011
Antwort Antwort
Seite 4 von 4   « Erste     234
Teekeks

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 00: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.851 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 06: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
 
#33

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 08: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 08:55 Uhr) Grund: Korrektur
  Mit Zitat antworten Zitat
Morphie

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 08: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
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#35

AW: Volltextsuche in Blob möglichst schnell

  Alt 27. Jun 2011, 15:39
Komisch, der Union scheint einen Datensatz nicht mehrfach auszugeben
Hab jetzt auf die Schnelle in dem Thread nicht gefunden, ob das geklärt wurde. Dafür gibts UNION ALL:
Code:
select 1 as wert from rdb$database
union
select 1 as wert from rdb$database
liefert einen Datensatz

Code:
select 1 as wert from rdb$database
union all
select 1 as wert from rdb$database
liefert 2 Datensätze
Jens
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:58 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