diff --git a/Aggregation/AbstractAggregation.php b/Aggregation/AbstractAggregation.php index e9106db331047a227ba6bf64486379669f06ee75..88f786f2bb7829f9772bd3d1199c941c41d0d097 100644 --- a/Aggregation/AbstractAggregation.php +++ b/Aggregation/AbstractAggregation.php @@ -11,13 +11,16 @@ namespace ONGR\ElasticsearchBundle\DSL\Aggregation; -use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderBag; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderInterface; /** * AbstractAggregation class. */ -abstract class AbstractAggregation implements BuilderInterface +abstract class AbstractAggregation implements FriendlyBuilderInterface { + const PREFIX = 'agg_'; + /** * @var string */ @@ -29,7 +32,7 @@ abstract class AbstractAggregation implements BuilderInterface protected $name; /** - * @var Aggregations + * @var FriendlyBuilderBag */ public $aggregations; @@ -58,7 +61,7 @@ abstract class AbstractAggregation implements BuilderInterface public function __construct($name) { $this->name = $name; - $this->aggregations = new Aggregations(); + $this->aggregations = new FriendlyBuilderBag(); } /** @@ -78,11 +81,11 @@ abstract class AbstractAggregation implements BuilderInterface } /** - * @return string + * {@inheritdoc} */ public function getName() { - return Aggregations::PREFIX . $this->name; + return self::PREFIX . $this->name; } /** diff --git a/Aggregation/Aggregations.php b/Aggregation/Aggregations.php deleted file mode 100644 index c7885abbc0027d1bb8a7f20007da622fd1d49e68..0000000000000000000000000000000000000000 --- a/Aggregation/Aggregations.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/* - * This file is part of the ONGR package. - * - * (c) NFQ Technologies UAB <info@nfq.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace ONGR\ElasticsearchBundle\DSL\Aggregation; - -/** - * Aggregations class. - */ -class Aggregations -{ - const PREFIX = 'agg_'; - - /** - * @var array - */ - private $aggregations = []; - - /** - * @param AbstractAggregation $agg - */ - public function addAggregation(AbstractAggregation $agg) - { - $this->aggregations[$agg->getName()] = $agg; - } - - /** - * Checks if aggregation is set. - * - * @param string $name - * - * @return bool - */ - public function has($name) - { - return isset($this->aggregations[$name]); - } - - /** - * Removes aggregation by it's name. - * - * @param string $name - */ - public function remove($name) - { - unset($this->aggregations[$name]); - } - - /** - * Gets aggregation by it's name. - * - * @param string $name - * - * @return AbstractAggregation - */ - public function get($name) - { - return $this->aggregations[$name]; - } - - /** - * Returns all aggregations. - * - * @param string|null $type - * - * @return AbstractAggregation[] - */ - public function all($type = null) - { - return array_filter( - $this->aggregations, - function ($aggregation) use ($type) { - /** @var AbstractAggregation $aggregation */ - - return $type === null || $aggregation->getType() == $type; - } - ); - } -} diff --git a/FriendlyBuilderBag.php b/FriendlyBuilderBag.php new file mode 100644 index 0000000000000000000000000000000000000000..dd90e94d741af1b7a8b500a014d1cd841e68e4f1 --- /dev/null +++ b/FriendlyBuilderBag.php @@ -0,0 +1,114 @@ +<?php + +/* + * This file is part of the ONGR package. + * + * (c) NFQ Technologies UAB <info@nfq.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ONGR\ElasticsearchBundle\DSL; + +/** + * Container for friendly builders. + */ +class FriendlyBuilderBag +{ + /** + * @var FriendlyBuilderInterface[] + */ + private $bag = []; + + /** + * @param FriendlyBuilderInterface[] $builders + */ + public function __construct(array $builders = []) + { + $this->set($builders); + } + + /** + * Replaces builders with new ones. + * + * @param FriendlyBuilderInterface[] $builders + */ + public function set(array $builders) + { + foreach ($builders as $builder) { + $this->add($builder); + } + } + + /** + * Adds a builder. + * + * @param FriendlyBuilderInterface $builder + */ + public function add(FriendlyBuilderInterface $builder) + { + $this->bag[$builder->getName()] = $builder; + } + + /** + * Checks if builder is set by name. + * + * @param string $name Builder name. + * + * @return bool + */ + public function has($name) + { + return isset($this->bag[$name]); + } + + /** + * Removes a builder by name. + * + * @param string $name Builder name. + */ + public function remove($name) + { + unset($this->bag[$name]); + } + + /** + * Clears contained builders. + */ + public function clear() + { + $this->bag = []; + } + + /** + * Returns a builder by name. + * + * @param string $name Builder name. + * + * @return FriendlyBuilderInterface + */ + public function get($name) + { + return $this->bag[$name]; + } + + /** + * Returns all builders contained. + * + * @param string|null $name Builder name. + * + * @return FriendlyBuilderInterface[] + */ + public function all($name = null) + { + return array_filter( + $this->bag, + function ($builder) use ($name) { + /** @var FriendlyBuilderInterface $builder */ + + return $name === null || $builder->getName() == $name; + } + ); + } +} diff --git a/FriendlyBuilderInterface.php b/FriendlyBuilderInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..a4e1e4b31fd89d59953509a114972fbb05f9308c --- /dev/null +++ b/FriendlyBuilderInterface.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the ONGR package. + * + * (c) NFQ Technologies UAB <info@nfq.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace ONGR\ElasticsearchBundle\DSL; + +/** + * Interface used by builders with names. + */ +interface FriendlyBuilderInterface extends BuilderInterface +{ + /** + * Returns builder name. + * + * @return string + */ + public function getName(); +} diff --git a/Search.php b/Search.php index 94316a4dd4ebfc1dc1bc15b90ed718d4f131eb9a..0328cf6a83df7e8b455a36e92186335c52277e7a 100644 --- a/Search.php +++ b/Search.php @@ -12,7 +12,6 @@ namespace ONGR\ElasticsearchBundle\DSL; use ONGR\ElasticsearchBundle\DSL\Aggregation\AbstractAggregation; -use ONGR\ElasticsearchBundle\DSL\Aggregation\Aggregations; use ONGR\ElasticsearchBundle\DSL\Bool\Bool; use ONGR\ElasticsearchBundle\DSL\Filter\PostFilter; use ONGR\ElasticsearchBundle\DSL\Highlight\Highlight; @@ -21,7 +20,6 @@ use ONGR\ElasticsearchBundle\DSL\Query\Query; use ONGR\ElasticsearchBundle\DSL\Sort\AbstractSort; use ONGR\ElasticsearchBundle\DSL\Sort\Sorts; use ONGR\ElasticsearchBundle\DSL\Suggester\AbstractSuggester; -use ONGR\ElasticsearchBundle\DSL\Suggester\Suggesters; /** * Search object that can be executed by a manager. @@ -91,7 +89,7 @@ class Search private $scriptFields; /** - * @var Suggesters + * @var FriendlyBuilderBag */ private $suggesters; @@ -116,7 +114,7 @@ class Search private $stats; /** - * @var Aggregations + * @var FriendlyBuilderBag */ private $aggregations; @@ -361,9 +359,9 @@ class Search public function addAggregation($agg) { if ($this->aggregations === null) { - $this->aggregations = new Aggregations(); + $this->aggregations = new FriendlyBuilderBag(); } - $this->aggregations->addAggregation($agg); + $this->aggregations->add($agg); return $this; } @@ -406,7 +404,7 @@ class Search public function addSuggester(AbstractSuggester $suggester) { if ($this->suggesters === null) { - $this->suggesters = new Suggesters(); + $this->suggesters = new FriendlyBuilderBag(); } $this->suggesters->add($suggester); @@ -475,7 +473,7 @@ class Search } /** - * @return Aggregations + * @return FriendlyBuilderBag */ public function getAggregations() { @@ -611,7 +609,7 @@ class Search } /** - * @return Suggesters + * @return FriendlyBuilderBag */ public function getSuggesters() { diff --git a/Suggester/AbstractSuggester.php b/Suggester/AbstractSuggester.php index 922aec13bcb05ba8f79c3725bb7af3a258e12a9e..ecef664b2ffe4aef9868a0b3f0daa4a8c02ee5a8 100644 --- a/Suggester/AbstractSuggester.php +++ b/Suggester/AbstractSuggester.php @@ -11,12 +11,12 @@ namespace ONGR\ElasticsearchBundle\DSL\Suggester; -use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\FriendlyBuilderInterface; /** * AbstractSuggester class. */ -abstract class AbstractSuggester implements BuilderInterface +abstract class AbstractSuggester implements FriendlyBuilderInterface { /** * @var string @@ -96,7 +96,7 @@ abstract class AbstractSuggester implements BuilderInterface } /** - * @return string + * {@inheritdoc} */ public function getName() { diff --git a/Suggester/Suggesters.php b/Suggester/Suggesters.php deleted file mode 100644 index dcfdca0c7936e037deee180b329391e759eec6c6..0000000000000000000000000000000000000000 --- a/Suggester/Suggesters.php +++ /dev/null @@ -1,86 +0,0 @@ -<?php - -/* - * This file is part of the ONGR package. - * - * (c) NFQ Technologies UAB <info@nfq.com> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace ONGR\ElasticsearchBundle\DSL\Suggester; - -/** - * Suggesters class. - */ -class Suggesters -{ - /** - * @var AbstractSuggester - */ - private $suggesters = []; - - /** - * Adds a suggester. - * - * @param AbstractSuggester $suggester - */ - public function add(AbstractSuggester $suggester) - { - $this->suggesters[$suggester->getName()] = $suggester; - } - - /** - * Checks if suggester is set. - * - * @param string $name - * - * @return bool - */ - public function has($name) - { - return isset($this->suggesters[$name]); - } - - /** - * Removes suggester. - * - * @param string $name - */ - public function remove($name) - { - unset($this->suggesters[$name]); - } - - /** - * Gets a suggester by it's name. - * - * @param string $name - * - * @return AbstractSuggester - */ - public function get($name) - { - return $this->suggesters[$name]; - } - - /** - * Gets all suggesters. - * - * @param string|null $name - * - * @return AbstractSuggester[] - */ - public function all($name = null) - { - return array_filter( - $this->suggesters, - function ($build) use ($name) { - /** @var AbstractSuggester $suggester */ - - return $name === null || $suggester->getName() == $name; - } - ); - } -}