1<?php 2 3namespace Elastica\Aggregation; 4 5use Elastica\Exception\InvalidException; 6 7/** 8 * Class Derivative. 9 * 10 * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-derivative-aggregation.html 11 */ 12class Derivative extends AbstractAggregation 13{ 14 /** 15 * @param string $name 16 * @param string|null $bucketsPath 17 */ 18 public function __construct(string $name, string $bucketsPath = null) 19 { 20 parent::__construct($name); 21 22 if (null !== $bucketsPath) { 23 $this->setBucketsPath($bucketsPath); 24 } 25 } 26 27 /** 28 * Set the buckets_path for this aggregation. 29 * 30 * @param string $bucketsPath 31 * 32 * @return $this 33 */ 34 public function setBucketsPath(string $bucketsPath) 35 { 36 return $this->setParam('buckets_path', $bucketsPath); 37 } 38 39 /** 40 * Set the gap policy for this aggregation. 41 * 42 * @param string $gapPolicy 43 * 44 * @return $this 45 */ 46 public function setGapPolicy(string $gapPolicy = 'skip') 47 { 48 return $this->setParam('gap_policy', $gapPolicy); 49 } 50 51 /** 52 * Set the format for this aggregation. 53 * 54 * @param string $format 55 * 56 * @return $this 57 */ 58 public function setFormat(string $format) 59 { 60 return $this->setParam('format', $format); 61 } 62 63 /** 64 * @throws InvalidException If buckets path or script is not set 65 * 66 * @return array 67 */ 68 public function toArray(): array 69 { 70 if (!$this->hasParam('buckets_path')) { 71 throw new InvalidException('Buckets path is required'); 72 } 73 74 return parent::toArray(); 75 } 76} 77