2016-04-23 5 views
0

ich einige Updates und Reparaturen verwenden tue Zeos auf einige alte D5 Geschäft stuff (Freebie für Freund) mit SQLite3 so 6,6SQLite, Textsuche FTS etc

Ich möchte eine Textsuche beschleunigen, die zur Zeit verwendet zwei BLOB_TEXT Fields, „Klasse“ und „Methoden“

if not(cbSearchMatchCase.Checked) then 
    SearchText:=UpperCase(SearchText); 
while not(dm.tbl.EOF) do 
begin 
    SearchData:=dm.tbl.FieldByName(fldClass).AsString+' '+ 
       dm.tbl.FieldByName(fldMethods).AsString; 
    if not(cbSearchMatchCase.Checked) then 
    SearchData:=UpperCase(SearchData); 
    MatchFound:=AnsiPos(SearchText,SearchData) > 0; 
    dm.tbl.Edit; 
    dm.tbl.FieldByName(fldSearch).AsBoolean:=MatchFound; 
    dm.tbl.Post; 
    pbMain.StepIt; 
    dm.tbl.Next; 
end; 

mir jemand irgend Code für die Verwendung der SQLite FTS Erweiterung oder etwas schneller als die oben zeigen kann?

fand ich dies aber nicht bekommen kann es für viel zu viele Gründe zu arbeiten hier zu definieren. Ich bin mir sicher, dass es funktioniert, da Žarko Gajićs Zeug immer genau ist, aber diese Installation einfach nicht funktioniert. :) http://zarko-gajic.iz.hr/full-text-txt- ... g-Projekt/

einfach diesen Link finden Sie hier ... Does BLOB data types in SQLite supports FULL-text search?

Das könnte erklären, warum nichts zu funktionieren scheint, The BLOB_TEXT ignoriert wird? Ja? Nein?

Alle Schnipsel, um diese Text Suche zu beschleunigen?

+0

Eine Sache ist nicht, FieldByName zu durchlaufen. Deklarieren Sie ein 'TField: = dm.tbl.FieldByName (fldClass)' außerhalb der Schleife, verwenden Sie TField.AsString innerhalb. –

+0

@JanDoggen Danke, aber das rasierte nur .8 einer Sekunde aus 600 Datensätzen in der Testdatenbank und wir haben 20.000 in der Realität. Derzeit läuft die Suche mit 18 Sekunden pro 1000. Um etwas zu bewirken, muss ich FTS4 zum Laufen bringen. – user2175495

Antwort

0

Warum nicht Index für Klasse/Methode erstellen? Es kann ein Expressionsindex sein: https://www.sqlite.org/expridx.html oder sogar ein komplexer. Ich würde mit Kleinbuchstaben beginnen und dann neu filtern, wenn die Groß-/Kleinschreibung beachtet werden muss.