2016-04-23 53 views
0

我做了一些老D5業務東西(贈品爲朋友)與sqlite3的一些更新和維修,從而不得不使用的Zeos 6.6SQLite的,文本搜索FTS等

我想加快文本搜索目前使用兩個BLOB_TEXT領域,「類」和「方法」

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; 

任何人都可以點我在使用SQLite的FTS擴展或東西比上面的快一些代碼?

我發現這個,但不能讓它工作的方式有太多的理由在這裏定義。我確信它的工作原理是ŽarkoGajić的東西始終是正確的,但只是沒有這個安裝。 :) http://zarko-gajic.iz.hr/full-text-txt- ... G-項目/

就在這裏找到此鏈接... Does BLOB data types in SQLite supports FULL-text search?

這或許可以解釋爲什麼似乎沒有任何工作,該BLOB_TEXT被忽略?是?沒有?

任何片段,以加快此文本搜索?

+0

有一件事是不通過FieldByName循環。在循環外聲明一個'TField:= dm.tbl.FieldByName(fldClass)',裏面使用TField.AsString。 –

+0

@JanDoggen謝謝,但只有在測試數據庫中刪除了600個記錄中的.8秒,我們有20,000個記錄。目前,該搜索以每1000個18秒的速度運行搜索。爲了產生任何影響,我需要讓FTS4運行。 – user2175495

回答

0

爲什麼不在類/方法上創建索引?它可以是表達指數:https://www.sqlite.org/expridx.html甚至複雜。我會從小寫開始,然後在需要區分大小寫的情況下重新過濾。