TestSearch.pp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. program TestSearch;
  2. { $define usefirebird}
  3. { $define usemem}
  4. {$mode objfpc}{$H+}
  5. {$IFDEF UNIX}
  6. {$linklib pthread}
  7. {$ENDIF}
  8. uses
  9. SysUtils,
  10. {$IFDEF UNIX} {$IFDEF UseCThreads}
  11. cthreads,
  12. {$ENDIF} {$ENDIF}
  13. {$ifdef usefirebird}
  14. SQLDBIndexDB, fbIndexdb,
  15. {$else}
  16. {$ifdef usemem}
  17. memindexdb,
  18. {$else}
  19. SQLIteIndexDB,
  20. {$endif}
  21. {$endif}
  22. fpIndexer;
  23. procedure usage;
  24. begin
  25. Writeln('Usage : ',ExtractFileName(ParamStr(0)),' [-e] databasename word');
  26. Writeln(' -e : Exact match only');
  27. halt(1);
  28. end;
  29. var
  30. Search: TFPSearch; //searches phrases
  31. start: TDateTime;
  32. endtime: TDateTime;
  33. i: integer;
  34. n: int64;
  35. {$ifdef usefirebird}
  36. Function CreateDB(const dbName : String) : TCustomIndexDB;
  37. Var
  38. IB: TFBIndexDB;
  39. begin
  40. IB := TFBIndexDB.Create(nil);
  41. IB.DatabasePath := dbname;
  42. IB.UserName := 'WISASOFT';
  43. IB.Password := 'SysteemD';
  44. if not FileExists(IB.DatabasePath) then
  45. begin
  46. writeln('error: could not find index database');
  47. halt;
  48. end
  49. else
  50. IB.Connect;
  51. Result:=IB;
  52. end;
  53. {$else}
  54. {$ifdef usemem}
  55. Function CreateDB (const dbName : String) : TCustomIndexDB;
  56. Var
  57. FB: TFileIndexDB;
  58. begin
  59. FB:=TFileIndexDB.Create(Nil);
  60. FB.FileName:=dbName;
  61. FB.Connect;
  62. Result:=FB;
  63. end;
  64. {$else}
  65. Function CreateDB (const dbName : String) : TCustomIndexDB;
  66. Var
  67. SB: TSQLIteIndexDB;
  68. begin
  69. SB := TSQLIteIndexDB.Create(nil);
  70. SB.FileName := dbname;
  71. if not FileExists(SB.FileName) then
  72. begin
  73. writeln('error: could not find index database');
  74. halt;
  75. end
  76. else
  77. SB.Connect;
  78. Result:=SB;
  79. end;
  80. {$endif}
  81. {$endif}
  82. Var
  83. DB : String;
  84. {$R *.res}
  85. begin
  86. start := Now;
  87. Search := TFPSearch.Create(nil);
  88. //setup parameters for indexing
  89. if (ParamCount<2) or (ParamCount>3) then
  90. Usage;
  91. if (ParamCount=2) then
  92. begin
  93. DB:=ParamStr(1);
  94. Search.SetSearchWord(ParamStr(2));
  95. Search.Options := [soContains]; //allowed to search with wildcards
  96. end
  97. else
  98. begin
  99. if (ParamStr(1)<>'-e') then
  100. Usage;
  101. DB:=ParamStr(2);
  102. Search.SetSearchWord(ParamStr(3));
  103. end;
  104. Search.Database := CreateDB(DB);
  105. //execute the search
  106. N := Search.Execute;
  107. endtime := Now;
  108. if N <> 0 then
  109. begin
  110. writeln('Searching for word: ', ParamStr(1));
  111. writeln;
  112. for i := 0 to Search.RankedCount - 1 do
  113. with Search.RankedResults[i] do
  114. writeln(Format('rank:%d word:%s pos:%d lang:%s %s filedate:%s context:%s', [Rank, SearchWord, Position, Language, URL, DateTimeToStr(FileDate), Context]));
  115. end;
  116. writeln;
  117. writeln(Format('done in %.3f sec.', [(endtime - start) * 24 * 3600]));
  118. end.