Author: Aurelien FOUCRET (aurelien.foucret@smile.fr)
Inheritance: implements Smile\ElasticsuiteCore\Search\Adapter\Elasticsuite\Request\Query\BuilderInterface
Example #1
0
 /**
  * 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]];
 }
Example #2
0
 /**
  * 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];
 }
Example #3
0
 /**
  * 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;
 }
Example #4
0
 /**
  * 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;
 }