PaliSearch.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace App\Tools;
  3. use Grpc\ChannelCredentials;
  4. use Illuminate\Support\Facades\Log;
  5. use Mint\Tulip\V1\SearchClient;
  6. use Mint\Tulip\V1\SearchRequest;
  7. use Mint\Tulip\V1\SearchRequest\Page;
  8. use Mint\Tulip\V1\UpdateRequest;
  9. class PaliSearch
  10. {
  11. public static function connect()
  12. {
  13. $host = config('mint.server.rpc.tulip.host').':'.config('mint.server.rpc.tulip.port');
  14. $client = new SearchClient($host, [
  15. 'credentials' => ChannelCredentials::createInsecure(),
  16. ]);
  17. return $client;
  18. }
  19. public static function search($words, $books, $matchMode = 'case', $index = 0, $size = 10)
  20. {
  21. $client = PaliSearch::connect();
  22. $request = new SearchRequest;
  23. $request->setKeywords($words);
  24. $request->setBooks($books);
  25. $request->setMatchMode($matchMode);
  26. $page = new Page;
  27. $page->setIndex($index);
  28. $page->setSize($size);
  29. $request->setPage($page);
  30. [$response, $status] = $client->Pali($request)->wait();
  31. if ($status->code !== \Grpc\STATUS_OK) {
  32. Log::error('ERROR: '.$status->code.', '.$status->details);
  33. return false;
  34. }
  35. $output = [];
  36. $output['total'] = $response->getTotal();
  37. $output['page'] = $response->getPage();
  38. $output['rows'] = [];
  39. foreach ($response->getItems() as $key => $value) {
  40. $output['rows'][] = (object) [
  41. 'rank' => $value->getRank(),
  42. 'highlight' => $value->getHighlight(),
  43. 'book' => $value->getBook(),
  44. 'paragraph' => $value->getParagraph(),
  45. 'content' => $value->getContent(),
  46. ];
  47. }
  48. return $output;
  49. }
  50. public static function book_list($words, $books, $matchMode = 'case', $index = 0, $size = 10)
  51. {
  52. $client = PaliSearch::connect();
  53. $request = new SearchRequest;
  54. $request->setKeywords($words);
  55. $request->setBooks($books);
  56. $request->setMatchMode($matchMode);
  57. $page = new Page;
  58. $page->setIndex($index);
  59. $page->setSize($size);
  60. $request->setPage($page);
  61. [$response, $status] = $client->BookList($request)->wait();
  62. if ($status->code !== \Grpc\STATUS_OK) {
  63. Log::error('ERROR: '.$status->code.', '.$status->details);
  64. return false;
  65. }
  66. $output = [];
  67. $output['rows'] = [];
  68. foreach ($response->getItems() as $key => $value) {
  69. $output['rows'][] = (object) [
  70. 'pcd_book_id' => $value->getBook(),
  71. 'co' => $value->getCount(),
  72. ];
  73. }
  74. return $output;
  75. }
  76. public static function update($book, $paragraph,
  77. $bold1, $bold2, $bold3,
  78. $content, $pcd_book_id)
  79. {
  80. $client = PaliSearch::connect();
  81. $request = new UpdateRequest;
  82. $request->setBook($book);
  83. $request->setParagraph($paragraph);
  84. $request->setLevel(0);
  85. $request->setBold1($bold1);
  86. $request->setBold2($bold2);
  87. $request->setBold3($bold3);
  88. $request->setContent($content);
  89. $request->setPcdBookId($pcd_book_id);
  90. [$response, $status] = $client->Update($request)->wait();
  91. if ($status->code !== \Grpc\STATUS_OK) {
  92. Log::error('ERROR: '.$status->code.', '.$status->details);
  93. return false;
  94. }
  95. return $response->getCount();
  96. }
  97. }