コード例 #1
0
 public function execute()
 {
     $context = RequestContext::getMain();
     $user = $context->getUser();
     $conn = $this->getCirrusConnection();
     $searcher = new Searcher($conn, 0, $this->getParameter('limit'), null, null, $user);
     $queryText = $this->getParameter('text');
     if (!$queryText) {
         return;
     }
     $contextString = $this->getParameter('context');
     if ($contextString) {
         $context = @json_decode($contextString, true);
         /*
          * Validate the context, must be in the form of:
          * {
          *   name: { foo: bar, baz: qux }
          *   name2: { foo: bar, baz: qux }
          * }
          *
          */
         if (!is_array($context)) {
             $context = null;
         } else {
             foreach ($context as $name => $ctx) {
                 if (!is_array($ctx)) {
                     $this->dieUsage("Bad context element {$name}", 'cirrus-badcontext');
                 }
             }
         }
     } else {
         $context = null;
     }
     // TODO: add passing context here,
     // see https://www.elastic.co/guide/en/elasticsearch/reference/current/suggester-context.html
     $result = $searcher->suggest($queryText, $context);
     if ($result->isOK()) {
         $this->getResult()->addValue(null, 'suggest', $result->getValue());
     } else {
         $this->getResult()->addValue(null, "error", $result->getErrorsArray());
     }
 }
コード例 #2
0
 /**
  * Transform the search request into a Status object representing the
  * search result. Varies based on CLI input argument `type`.
  *
  * @param string $query
  * @return Status<ResultSet>
  */
 protected function searchFor($query)
 {
     $searchType = $this->getOption('type', 'full_text');
     switch ($searchType) {
         case 'full_text':
             // @todo pass through $this->getConnection() ?
             $engine = new CirrusSearch($this->indexBaseName);
             $engine->setConnection($this->getConnection());
             $result = $engine->searchText($query);
             if ($result instanceof Status) {
                 return $result;
             } else {
                 return Status::newGood($result);
             }
         case 'prefix':
             $searcher = new Searcher($this->getConnection(), 0, 10, null, null, null, $this->indexBaseName);
             return $searcher->prefixSearch($query);
         case 'suggest':
             $searcher = new Searcher($this->getConnection(), 0, 10, null, null, null, $this->indexBaseName);
             $result = $searcher->suggest($query);
             if ($result instanceof Status) {
                 return $result;
             } else {
                 return Status::newGood($result);
             }
         default:
             $this->error("\nERROR: Unknown search type {$searchType}\n");
             exit(1);
     }
 }