Build the ES query from a Query
public buildQuery ( Smile\ElasticsuiteCore\Search\Request\QueryInterface $query ) : array | ||
$query | Smile\ElasticsuiteCore\Search\Request\QueryInterface | Query to be built. |
return | array |
/** * Build the aggregation. * * @param BucketInterface $bucket Term bucket. * * @return array */ public function buildBucket(BucketInterface $bucket) { $filters = []; foreach ($bucket->getQueries() as $value => $query) { $filters[$value] = $this->queryBuilder->buildQuery($query); } return ['filters' => ['filters' => $filters]]; }
/** * Build a sort order ES condition from a SortOrderInterface specification. * * @SuppressWarnings(PHPMD.UnusedPrivateMethod) * * @param SortOrderInterface $sortOrder Request sort order specification object. * * @return array */ private function buildSortOrder(SortOrderInterface $sortOrder) { $sortField = $sortOrder->getField(); $sortOrderConfig = ['order' => $sortOrder->getDirection(), 'missing' => $sortOrder->getDirection() == SortOrderInterface::SORT_ASC ? '_last' : '_first', 'unmapped_type' => FieldInterface::FIELD_TYPE_STRING]; if ($sortOrder->getType() == SortOrderInterface::TYPE_NESTED) { $sortOrderConfig['nested_path'] = $sortOrder->getNestedPath(); $sortOrderConfig['mode'] = $sortOrder->getScoreMode(); if ($sortOrder->getNestedFilter()) { $sortOrderConfig['nested_filter'] = $this->queryBuilder->buildQuery($sortOrder->getNestedFilter()); } } return [$sortField => $sortOrderConfig]; }
/** * Extract and build the root filter of the search request. * * @param RequestInterface $request Search request. * * @return array */ private function getRootFilter(RequestInterface $request) { $filter = null; if ($request->getFilter()) { $filter = $this->queryBuilder->buildQuery($request->getFilter()); } return $filter; }
/** * Build ES aggregations from search request buckets. * * @param BucketInterface[] $buckets Bucket to be converted into ES aggregations * * @return array */ public function buildAggregations(array $buckets = []) { $aggregations = []; foreach ($buckets as $bucket) { $bucketType = $bucket->getType(); $builder = $this->getBuilder($bucketType); $aggregation = $builder->buildBucket($bucket); if ($bucket->isNested()) { if ($bucket->getNestedFilter()) { $aggregation = ['filter' => $this->queryBuilder->buildQuery($bucket->getNestedFilter()), 'aggregations' => [$bucket->getName() => $aggregation]]; } $aggregation = ['nested' => ['path' => $bucket->getNestedPath()], 'aggregations' => [$bucket->getName() => $aggregation]]; } if ($bucket->getFilter()) { $aggregation = ['filter' => $this->queryBuilder->buildQuery($bucket->getFilter()), 'aggregations' => [$bucket->getName() => $aggregation]]; } $aggregations[$bucket->getName()] = $aggregation; } return $aggregations; }