From 9f30b17192f650cc08cd4a14a18874da27a4450b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mantas=20Jonu=C5=A1as?= <mantas.jonusas@nfq.lt> Date: Fri, 27 Feb 2015 12:02:51 +0200 Subject: [PATCH] Added missing filters --- Filter/GeoDistanceFilter.php | 75 +++++++++++++++++++++++++++++++ Filter/GeoDistanceRangeFilter.php | 72 +++++++++++++++++++++++++++++ Filter/GeoPolygonFilter.php | 64 ++++++++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 Filter/GeoDistanceFilter.php create mode 100644 Filter/GeoDistanceRangeFilter.php create mode 100644 Filter/GeoPolygonFilter.php diff --git a/Filter/GeoDistanceFilter.php b/Filter/GeoDistanceFilter.php new file mode 100644 index 0000000..cdffa4f --- /dev/null +++ b/Filter/GeoDistanceFilter.php @@ -0,0 +1,75 @@ +<?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\Filter; + +use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\ParametersTrait; + +/** + * Represents Elasticsearch "Geo Distance Filter" filter. + */ +class GeoDistanceFilter implements BuilderInterface +{ + use ParametersTrait; + + /** + * @var string + */ + private $distance; + + /** + * @var string + */ + private $field; + + /** + * @var mixed + */ + private $location; + + /** + * @param string $distance + * @param string $field + * @param mixed $location + * @param array $parameters + */ + public function __construct($distance, $field, $location, array $parameters = []) + { + $this->distance = $distance; + $this->field = $field; + $this->location = $location; + + $this->setParameters($parameters); + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return 'geo_distance'; + } + + /** + * {@inheritdoc} + */ + public function toArray() + { + $query = [ + 'distance' => $this->distance, + $this->field => $this->location, + ]; + $output = $this->processArray($query); + + return $output; + } +} diff --git a/Filter/GeoDistanceRangeFilter.php b/Filter/GeoDistanceRangeFilter.php new file mode 100644 index 0000000..0552285 --- /dev/null +++ b/Filter/GeoDistanceRangeFilter.php @@ -0,0 +1,72 @@ +<?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\Filter; + +use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\ParametersTrait; + +/** + * Represents Elasticsearch "Geo Distance Range Filter" filter. + */ +class GeoDistanceRangeFilter implements BuilderInterface +{ + use ParametersTrait; + + /** + * @var string + */ + private $field; + + /** + * @var array + */ + private $range; + + /** + * @var mixed + */ + private $location; + + /** + * @param string $field + * @param array $range + * @param mixed $location + * @param array $parameters + */ + public function __construct($field, $range, $location, array $parameters = []) + { + $this->field = $field; + $this->range = $range; + $this->location = $location; + + $this->setParameters($parameters); + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return 'geo_distance_range'; + } + + /** + * {@inheritdoc} + */ + public function toArray() + { + $query = $this->range + [$this->field => $this->location]; + $output = $this->processArray($query); + + return $output; + } +} diff --git a/Filter/GeoPolygonFilter.php b/Filter/GeoPolygonFilter.php new file mode 100644 index 0000000..6b27c46 --- /dev/null +++ b/Filter/GeoPolygonFilter.php @@ -0,0 +1,64 @@ +<?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\Filter; + +use ONGR\ElasticsearchBundle\DSL\BuilderInterface; +use ONGR\ElasticsearchBundle\DSL\ParametersTrait; + +/** + * Elasticsearch geo polygon filter. + */ +class GeoPolygonFilter implements BuilderInterface +{ + use ParametersTrait; + + /** + * @var string + */ + private $field; + + /** + * @var array + */ + private $points; + + /** + * @param string $field + * @param array $points + * @param array $parameters + */ + public function __construct($field, array $points = [], array $parameters = []) + { + $this->field = $field; + $this->points = $points; + $this->setParameters($parameters); + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return 'geo_polygon'; + } + + /** + * {@inheritdoc} + */ + public function toArray() + { + $query[$this->field] = ['points' => $this->points]; + $output = $this->processArray($query); + + return $output; + } +} -- GitLab