2016-04-23 67 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甚至复杂。我会从小写开始,然后在需要区分大小写的情况下重新过滤。