fieldMapper = $fieldMapper; } /** * Build aggregation query for request * * @param RequestInterface $request * @param array $searchQuery * @return array * @since 100.1.0 */ public function build( RequestInterface $request, array $searchQuery ) { $buckets = $request->getAggregation(); foreach ($buckets as $bucket) { $searchQuery = $this->buildBucket($searchQuery, $bucket); } return $searchQuery; } /** * Build aggregation query for bucket * * @param array $searchQuery * @param BucketInterface $bucket * @return array * @since 100.1.0 */ protected function buildBucket( array $searchQuery, BucketInterface $bucket ) { $field = $this->fieldMapper->getFieldName($bucket->getField()); switch ($bucket->getType()) { case BucketInterface::TYPE_TERM: $searchQuery['body']['aggregations'][$bucket->getName()]= [ 'terms' => [ 'field' => $field, 'size' => self::$maxTermBacketSize, ], ]; break; case BucketInterface::TYPE_DYNAMIC: $searchQuery['body']['aggregations'][$bucket->getName()]= [ 'extended_stats' => [ 'field' => $field, ], ]; break; } return $searchQuery; } }