123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- program TestSearch;
- { $define usefirebird}
- { $define usemem}
- {$mode objfpc}{$H+}
- {$IFDEF UNIX}
- {$linklib pthread}
- {$ENDIF}
- uses
- SysUtils,
- {$IFDEF UNIX} {$IFDEF UseCThreads}
- cthreads,
- {$ENDIF} {$ENDIF}
- {$ifdef usefirebird}
- SQLDBIndexDB, fbIndexdb,
- {$else}
- {$ifdef usemem}
- memindexdb,
- {$else}
- SQLIteIndexDB,
- {$endif}
- {$endif}
- fpIndexer;
- procedure usage;
- begin
- Writeln('Usage : ',ExtractFileName(ParamStr(0)),' [-e] databasename word');
- Writeln(' -e : Exact match only');
- halt(1);
- end;
- var
- Search: TFPSearch; //searches phrases
- start: TDateTime;
- endtime: TDateTime;
- i: integer;
- n: int64;
- {$ifdef usefirebird}
- Function CreateDB(const dbName : String) : TCustomIndexDB;
- Var
- IB: TFBIndexDB;
- begin
- IB := TFBIndexDB.Create(nil);
- IB.DatabasePath := dbname;
- IB.UserName := 'WISASOFT';
- IB.Password := 'SysteemD';
- if not FileExists(IB.DatabasePath) then
- begin
- writeln('error: could not find index database');
- halt;
- end
- else
- IB.Connect;
- Result:=IB;
- end;
- {$else}
- {$ifdef usemem}
- Function CreateDB (const dbName : String) : TCustomIndexDB;
- Var
- FB: TFileIndexDB;
- begin
- FB:=TFileIndexDB.Create(Nil);
- FB.FileName:=dbName;
- FB.Connect;
- Result:=FB;
- end;
- {$else}
- Function CreateDB (const dbName : String) : TCustomIndexDB;
- Var
- SB: TSQLIteIndexDB;
- begin
- SB := TSQLIteIndexDB.Create(nil);
- SB.FileName := dbname;
- if not FileExists(SB.FileName) then
- begin
- writeln('error: could not find index database');
- halt;
- end
- else
- SB.Connect;
- Result:=SB;
- end;
- {$endif}
- {$endif}
- Var
- DB : String;
- {$R *.res}
- begin
- start := Now;
- Search := TFPSearch.Create(nil);
- //setup parameters for indexing
- if (ParamCount<2) or (ParamCount>3) then
- Usage;
- if (ParamCount=2) then
- begin
- DB:=ParamStr(1);
- Search.SetSearchWord(ParamStr(2));
- Search.Options := [soContains]; //allowed to search with wildcards
- end
- else
- begin
- if (ParamStr(1)<>'-e') then
- Usage;
- DB:=ParamStr(2);
- Search.SetSearchWord(ParamStr(3));
- end;
- Search.Database := CreateDB(DB);
- //execute the search
- N := Search.Execute;
- endtime := Now;
- if N <> 0 then
- begin
- writeln('Searching for word: ', ParamStr(1));
- writeln;
- for i := 0 to Search.RankedCount - 1 do
- with Search.RankedResults[i] do
- writeln(Format('rank:%d word:%s pos:%d lang:%s %s filedate:%s context:%s', [Rank, SearchWord, Position, Language, URL, DateTimeToStr(FileDate), Context]));
- end;
- writeln;
- writeln(Format('done in %.3f sec.', [(endtime - start) * 24 * 3600]));
- end.
|