fpc/packages/fpindexer/examples/TestSearch.pp
michael aa45ca8e0e * First version of fpindexer engine
git-svn-id: trunk@20496 -
2012-03-10 16:04:12 +00:00

131 lines
2.7 KiB
ObjectPascal

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.