Пример #1
0
 /**
  * Map field value to a proper Elasticsearch query representation
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion
  * @param \eZ\Publish\Core\Search\Elasticsearch\Content\CriterionVisitorDispatcher $dispatcher
  * @param array $fieldFilters
  *
  * @return mixed
  */
 public function visitQuery(Criterion $criterion, Dispatcher $dispatcher, array $fieldFilters)
 {
     /** @var $criterion \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LogicalOperator */
     return array("bool" => array("should" => array_map(function ($value) use($dispatcher, $fieldFilters) {
         return $dispatcher->dispatch($value, Dispatcher::CONTEXT_FILTER, $fieldFilters);
     }, $criterion->criteria), "minimum_should_match" => 1));
 }
Пример #2
0
 /**
  * Map field value to a proper Elasticsearch query representation.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion
  * @param \eZ\Publish\Core\Search\Elasticsearch\Content\CriterionVisitorDispatcher $dispatcher
  * @param array $languageFilter
  *
  * @return mixed
  */
 public function visitQuery(Criterion $criterion, Dispatcher $dispatcher, array $languageFilter)
 {
     /* @var $criterion \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LogicalOperator */
     return array('bool' => array('must' => array(array_map(function ($value) use($dispatcher, $languageFilter) {
         return $dispatcher->dispatch($value, Dispatcher::CONTEXT_QUERY, $languageFilter);
     }, $criterion->criteria))));
 }
Пример #3
0
 /**
  * Finds and returns documents of a given $type for a given $query object.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query $query
  * @param string $type
  * @param array $fieldFilters
  *
  * @return mixed
  */
 public function find(Query $query, $type, array $fieldFilters = array())
 {
     $aggregationList = array_map(array($this->facetBuilderVisitor, 'visit'), $query->facetBuilders);
     $aggregations = array();
     foreach ($aggregationList as $aggregation) {
         $aggregations[key($aggregation)] = reset($aggregation);
     }
     $ast = array("query" => array("filtered" => array("query" => array($this->criterionVisitorDispatcher->dispatch($query->query, CriterionVisitorDispatcher::CONTEXT_QUERY, $fieldFilters)), "filter" => array($this->criterionVisitorDispatcher->dispatch($query->filter, CriterionVisitorDispatcher::CONTEXT_FILTER, $fieldFilters)))), "aggregations" => empty($aggregations) ? new ArrayObject() : $aggregations, "sort" => array_map(array($this->sortClauseVisitor, "visit"), $query->sortClauses), "track_scores" => true, "from" => $query->offset, "size" => $query->limit);
     $response = $this->findRaw(json_encode($ast), $type);
     // TODO: error handling
     $data = json_decode($response->body);
     return $data;
 }
Пример #4
0
 /**
  * Finds and returns documents of a given $type for a given $query object.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query $query
  * @param string $type
  * @param array $languageFilter
  *
  * @return mixed
  */
 public function find(Query $query, $type, array $languageFilter = array())
 {
     $aggregationList = array_map(array($this->facetBuilderVisitor, 'visit'), $query->facetBuilders);
     $aggregations = array();
     foreach ($aggregationList as $aggregation) {
         $aggregations[key($aggregation)] = reset($aggregation);
     }
     $ast = array('query' => array('filtered' => array('query' => array($this->criterionVisitorDispatcher->dispatch($query->query, CriterionVisitorDispatcher::CONTEXT_QUERY, $languageFilter)), 'filter' => array($this->criterionVisitorDispatcher->dispatch($query->filter, CriterionVisitorDispatcher::CONTEXT_FILTER, $languageFilter)))), 'aggregations' => empty($aggregations) ? new ArrayObject() : $aggregations, 'sort' => array_map(array($this->sortClauseVisitor, 'visit'), $query->sortClauses), 'track_scores' => true, 'from' => $query->offset, 'size' => $query->limit);
     $response = $this->findRaw(json_encode($ast), $type);
     // TODO: error handling
     $data = json_decode($response->body);
     return $data;
 }
Пример #5
0
 /**
  * Map field value to a proper Elasticsearch query representation.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion
  * @param \eZ\Publish\Core\Search\Elasticsearch\Content\CriterionVisitorDispatcher $dispatcher
  * @param array $languageFilter
  *
  * @return mixed
  */
 public function visitQuery(Criterion $criterion, Dispatcher $dispatcher, array $languageFilter)
 {
     $this->validateCriterionInput($criterion);
     /* @var $criterion \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LogicalOperator */
     return array('bool' => array('must_not' => $dispatcher->dispatch($criterion->criteria[0], Dispatcher::CONTEXT_FILTER, $languageFilter)));
 }