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