2016-04-23 14 views
0

私はSQLite3のと、いくつかの古いD5ビジネスのもの(友人用景品)のいくつかの更新や修理をやっているので、私は現在、テキスト検索をスピードアップしたいのZeos 6.6SQLiteの、テキスト検索FTSなど

を使用する必要があります2つの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をループしないことが1つあります。ループの外側でTField:= dm.tbl.FieldByName(fldClass)を宣言し、TField.AsStringを内部で使用します。 –

+0

@JanDoggenありがとうございましたが、それはテストデータベースの600レコードを1/8秒しか削っていませんでしたが、実際には2万回あります。現在、それは1000秒あたり18秒で検索を実行しています。影響を与えるためには、FTS4を稼働させる必要があります。 – user2175495

答えて

0

なぜクラス/メソッドにインデックスを作成しないのですか?表現インデックス:https://www.sqlite.org/expridx.htmlでも複雑なものでもかまいません。私は小文字で始まり、大文字と小文字の区別が必要な場合は再フィルタリングを行います。