Beispiel #1
0
 /**
  * Finds content objects for the given query.
  *
  * @todo define structs for the field filters
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query $query
  * @param array $fieldFilters - a map of filters for the returned fields.
  *        Currently supported: <code>array("languages" => array(<language1>,..))</code>.
  *
  * @return mixed
  */
 public function find(Query $query, array $fieldFilters = array())
 {
     $query = clone $query;
     $this->coreFilter->apply($query, $fieldFilters);
     $parameters = array("q" => $this->criterionVisitor->visit($query->query), "fq" => $this->criterionVisitor->visit($query->filter), "sort" => $this->getSortClauses($query->sortClauses), "start" => $query->offset, "rows" => $query->limit, "fl" => "*,score,[shard]", "wt" => "json");
     $searchTargets = $this->getSearchTargets($fieldFilters);
     if (!empty($searchTargets)) {
         $parameters["shards"] = $searchTargets;
     }
     $queryString = http_build_query($parameters);
     $facets = $this->getFacets($query->facetBuilders);
     if (!empty($facets)) {
         $queryString .= "&facet=true&facet.sort=count&{$facets}";
     }
     $response = $this->client->request('GET', $this->endpointRegistry->getEndpoint($this->endpointResolver->getEntryEndpoint()), "/select?{$queryString}");
     // @todo: Error handling?
     $result = json_decode($response->body);
     if (!isset($result->response)) {
         throw new \Exception('->response not set: ' . var_export(array($result, $parameters), true));
     }
     return $result;
 }