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
Seite 1 von 4  1 23     Letzte »    
Teekeks

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

Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 15:04
Datenbank: Firebird • Version: 7 • Zugriff über: Zeos
Hallo!
Ich habe eine Tabelle mit einigen Datensätzen (sagen wir einmal 100) in der jeweils in einem Blob (sub_type 1) ein langer Text gespeichert wird.
Jetzt möchte ich möglichst schnell in diesem Blob nach verschiedenen Begriffen suchen und die Anzahl der unterschiedlichen Begriffe die in dem Text vorkommen zurückgeben.

Im Grunde gesehen sollte das doch genau das sein, was in der Suche eines Forums gemacht wird.
Wie wird das dort umgesetzt?
Oder: was könnt ihr mir hier empfehlen?

Vielen Dank schon einmal für eure 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.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 15:42
Das Problem ist, dass Blobs nicht indiziert werden. Beim Durchsuchen wird jeder Datensatz angefasst.
Btw. 100 Datensätze sind ja nicht viel
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 15:54
Warum speicherst du den Text in einem Blob und nicht in einem Text-Feld?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 16:13
Wenn Du nach mittelständigen Begriffen suchst ist das ein SQL-Like-statement z.B.: 'Like %Begriff%'. Schneller wird das wenn Du dies, wie s.h.a.r.k. anmerkt, in ein Textfeld wandelst. Indizieren dürfte nicht viel bis nichts bringen.
Martin Schaefer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 16:19
Man müsste einen Fulltextindex implementieren. Technisch sollte keine Unterschied zwischen einem langen VARCHAR-Feld und einem Textblob bestehen.

http://www.firebirdfaq.org/faq328/
Markus Kinzler
  Mit Zitat antworten Zitat
Teekeks

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 17:45
Doch, es gibt einen Unterschied: Ich kann keinen Varchar mit z.B. 10000 Zeichen anlegen! Wenn ich dies Versuche, bekomme ich folgende Nachricht:
Zitat:
Dynamic SQL Error
SQL error code = -204
Data type unknown
Implementation limit exceeded
COLUMN TEST
Ich habe mal mit dem Like rumgespielt (das hatte ich ganz vergessen dass es das gibt ^^)
Dabei herrausgekommen ist folgendes:
Code:
SELECT Count(*) FROM PE_REZEPTE a WHERE a.Text like '%Fenchel%' and a.nummer=2
Kann ich dass jetzt für eine Nummer auch auf mehrere Begriffe ausweiten? Also das ich nicht nur nach "Fenchel" suche sondern auch z.B. nach "Banane"?
Weil jetzt wird ja nur zurück gegeben ob der eine Begriff da ist oder nicht, wobei sich Count ja momentan auf die anzahl der zurückgegebenen Datensätze (also ja Maximal 1 wegen dem eindeutigen Feld Nummer) bezieht.

Liege ich da jetzt mit meinen Gedankenwegen auf dem richtigen Weg oder soll ich doch anders vorgehen?

Danke schon einmal für eure Hilfe bis hierhin!
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
 
#7

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 17:57
Eigentlich sollte die Beschränkung bei 32768 sein. Ab Firebird 2.1 werden Textblobs unterhalb dieser Grenze sowieso wie ein VARCHAR-Feld behandelt.
Markus Kinzler

Geändert von mkinzler (26. Jun 2011 um 18:01 Uhr)
  Mit Zitat antworten Zitat
Teekeks

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 18:21
Hmmm gut. Wir haben schon mal Firebird 2.1 am laufen.
Zeichensatz ist UTF8.
Wie viele sind den dort maximal möglich?
Laut einem Text von 2006 ist da maximal etwa 10000 Zeichen möglich, aber auch schon 4000 schlagen ja fehl.
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
 
#9

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 18:28
Die Begrenzung ist wie gesagt 32765. Bei Firebird >=2.5 wird dann auch ein Textblob der kürzer ist wie ein VARCHAR-Feld behandelt

Zitat:
BLOB Subtype 1 Compatibility with VARCHAR
A. dos Santos Fernandes
(v.2.1) At various levels of evaluation, the engine now treats text BLOBs that are within the 32,765-byte string size limit as though they were VARCHARs. Operations that now allow text BLOBs to behave like strings are:
• Assignments, conversions and concatenations (|| operator)
• Operators = , <>, >, <, >=, <=, BETWEEN, IS [NOT] DISTINCT FROM
• Functions CAST, BIT_LENGTH, CHAR[ACTER]_LENGTH, OCTET_LENGTH, LEFT, RIGHT, HASH, LOWER, UPPER, LPAD, RPAD, TRIM, OVERLAY, REPLACE, POSITION, REVERSE, MINVALUE, MAXVALUE, SUBSTRING
• Existential predicators IN, ANY/SOME, ALL • Search predicators CONTAINING, STARTING [WITH], LIKE
• A LIST expression. Note that, prior to v.2.1.4, the last part of the result may be truncated, an effect that applies to native VARCHAR columns also.
Markus Kinzler
  Mit Zitat antworten Zitat
Teekeks

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

AW: Volltextsuche in Blob möglichst schnell

  Alt 26. Jun 2011, 18:33
Woran liegt es dann aber das ich bei diesem SQL-Befehl:
Code:
ALTER TABLE PE_REZEPTE ADD
test Varchar(10000);
Diese Fehlermeldung bekomme?
Zitat:
Dynamic SQL Error
SQL error code = -204
Data type unknown
Implementation limit exceeded
COLUMN TEST
Könnte das vl an Flamerobin liegen (mit diesem Programm lege ich die Felder an).
Irgendeinen Grund muss das doch haben dass es normalerweise geht, aber hier nicht.

Gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 00:09 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