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()); } }
/** * 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); } }