![]() |
AW: Volltextsuche in Blob möglichst schnell
Hmmmm. vielleicht solltest du einen anderen Ansatz wählen. Teile den Text doch in Wörter auf und schmeiss die Wörter in eine separate Tabelle: Jedes Wort bekommt dabei einen Verweis auf den Originaltext, bzw. seinen PK.
Dann kannst Du in der Worttabelle sehr schnell suchen, sofern du nach Wörtern bzw. dem Wortanfang suchst. Wenn Du dann noch die Wortposition mit speicherst (also das wievielte Wort im Text es ist), kannst Du sogar nach Inhalten suchen... Dann dürfen die gesuchten Worte nicht zu weit voneinander entfernt sein, d.h. die Wortpositionen sind z.B. < 10 oder so. Auf 32k-Begrenzungen würde ich mich nicht einlassen, denn eine Beschränkung auf einer derart atomaren Ebene ist ein Designfehler. |
AW: Volltextsuche in Blob möglichst schnell
Ich hab es mal in IBExpert getestet. Hat problemlos funktioniert. Scheint also ein Problem von FlameRobin zu sein.
Zitat:
Zitat:
Erstens sind die meisten Texte kürzer. Zweitens kann man bei längerer Texten ja eine Textblob verwenden, dann existiert keine Beschränkung ( höchtens der Größe der Festplatte) Bei Firebird >=2.1 würde ich auf jeden Fall einen Blob verwenden, weil man dann die Vorteile beider Implementierungen nutzen kann (siehe oben) |
AW: Volltextsuche in Blob möglichst schnell
Eigendlich reicht mir das Blob ja.
Und es wird ja sowieso als VarChar behandelt. In so fern sollte dass ja dann auch egal sein. Ich habe ja schon weiter oben einen Teilansatz gefunden, aber irgendwie war meine Frage dann untergegangen. Jetzt also noch mal: Zitat:
|
AW: Volltextsuche in Blob möglichst schnell
Du kannst natürlich per OR mehrere Suchen kombinieren. Aber ohne einen Index wird das dann nicht gerade performant sein.
|
AW: Volltextsuche in Blob möglichst schnell
Code:
Das scheint es nicht zu sein was du meinst.
SELECT Count(*) FROM PE_REZEPTE a WHERE (a.Text like '%Fenchel%' and a.nummer=2) or (a.Text like '%gut%' and a.nummer=2)
Noch mal zur verdeutlichung: Wenn im Text sowol das Wort Fenchel als auch gut vorkommt, soll die zahl 2 zurück gegeben werden. Bein nur einem der beiden eine 1 und bei keinem eine 0. Bei meinem oberen Beispiel kommt (obwohl beide Begriffe vorkommen) die zahl 1 zurück. Wobei ich ja nur die Where-Klausel mit or verknüpft habe und nicht die Abfrage. |
AW: Volltextsuche in Blob möglichst schnell
Z.B. so
SQL-Code:
Wobei dann die Suchwörter nicht öfters im Text vorkommen dürfen
select
sum( wert) from ( select count( *) as wert FROM PE_REZEPTE WHERE Text containing :such1 and a.nummer=:nummer union select count( *) as wert FROM PE_REZEPTE WHERE Text containing :such2 and a.nummer=:nummer); |
AW: Volltextsuche in Blob möglichst schnell
hmm, Nein.
Damit:
SQL-Code:
Müsste ich ja auf jeden Fall 2 herausbekommen, es kommt jedoch nur 1 heraus. :(
select
sum( wert) from ( select count( *) as wert FROM PE_REZEPTE WHERE Text containing 'Abendessen' and nummer=1 union select count( *) as wert FROM PE_REZEPTE WHERE Text containing 'Abendessen' and nummer=1); |
AW: Volltextsuche in Blob möglichst schnell
Was liefert der Union allein?
|
AW: Volltextsuche in Blob möglichst schnell
Ebenfalls 1, auch bei verschiedenen Begriffen.
Ah, was Passiert denn wenn die Suchbegriffe öfters vorkommen? |
AW: Volltextsuche in Blob möglichst schnell
Komisch, der Union scheint einen Datensatz nicht mehrfach auszugeben
SQL-Code:
execute block
returns (ret smallint ) as declare variable w smallint; begin w = 0; ret = 0; select count (*) from PE_REZEPT where text containing 'Abendessen' and nummer = 2 into :w; if (w > 0) then ret = 1; select count (*) from PE_REZEPT where text containing 'Brot' and nummer = 2 into :w; if (w > 0) then ret = :ret + 1; Suspend; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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