Skip to content
Snippets Groups Projects
Commit 9b4ab1c0 authored by Martynas Sudintas's avatar Martynas Sudintas
Browse files

Deleted AbstractFilter

parent b5caceb4
No related branches found
No related tags found
No related merge requests found
<?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\Bool\Bool;
use ONGR\ElasticsearchBundle\DSL\BuilderInterface;
/**
* AbstractFilter class.
*/
abstract class AbstractFilter
{
/**
* @var BuilderInterface
*/
protected $filters;
/**
* Initializes bool filter.
*
* @param array $boolParams Bool parameters.
*/
public function __construct($boolParams = [])
{
$this->filters = new Bool();
$this->filters->setParameters($boolParams);
}
/**
* @param BuilderInterface $filter Filter.
* @param string $boolType Possible boolType values:
* - must
* - must_not
* - should.
*/
public function addFilter(BuilderInterface $filter, $boolType = 'must')
{
$this->filters->addToBool($filter, $boolType);
}
/**
* Overrides filters.
*
* @param BuilderInterface $filters
*
* @return $this
*/
public function setFilter(BuilderInterface $filters)
{
$this->filters = $filters;
return $this;
}
/**
* @param array $boolParams
*/
public function setBoolParameters($boolParams)
{
$this->filters->setParameters($boolParams);
}
/**
* {@inheritdoc}
*/
public function toArray()
{
$output = [];
$output[$this->filters->getType()] = $this->filters->toArray();
return $output;
}
}
...@@ -14,18 +14,67 @@ namespace ONGR\ElasticsearchBundle\DSL\Filter; ...@@ -14,18 +14,67 @@ namespace ONGR\ElasticsearchBundle\DSL\Filter;
use ONGR\ElasticsearchBundle\DSL\BuilderInterface; use ONGR\ElasticsearchBundle\DSL\BuilderInterface;
/** /**
* Filters container. * Represents Elasticsearch "post_filter" filter.
*
* @link http://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html
*/ */
class PostFilter extends AbstractFilter implements BuilderInterface class PostFilter implements BuilderInterface
{ {
/**
* @var BuilderInterface
*/
private $filter;
/**
* Sets a filter.
*
* @param BuilderInterface $filter
*/
public function __construct(BuilderInterface $filter = null)
{
if ($this->filter !== null) {
$this->setFilter($filter);
}
}
/** /**
* Checks if bool filter is relevant. * Checks if bool filter is relevant.
* *
* @return bool * @return bool
*
* @deprecated Will be removed in 1.0. Use getFilter() method.
*/ */
public function isRelevant() public function isRelevant()
{ {
return $this->filters->isRelevant(); return isset($this->filter);
}
/**
* Returns filter.
*
* @return BuilderInterface
*/
public function getFilter()
{
return $this->filter;
}
/**
* Sets filter.
*
* @param BuilderInterface $filter
*/
public function setFilter(BuilderInterface $filter)
{
$this->filter = $filter;
}
/**
* {@inheritdoc}
*/
public function toArray()
{
return [$this->getFilter()->getType() => $this->getFilter()->toArray()];
} }
/** /**
......
...@@ -104,9 +104,8 @@ class NamedBuilderBag ...@@ -104,9 +104,8 @@ class NamedBuilderBag
{ {
return array_filter( return array_filter(
$this->bag, $this->bag,
/** @var NamedBuilderInterface $builder */
function ($builder) use ($type) { function ($builder) use ($type) {
/** @var NamedBuilderInterface $builder */
return $type === null || $builder->getType() == $type; return $type === null || $builder->getType() == $type;
} }
); );
......
...@@ -12,45 +12,76 @@ ...@@ -12,45 +12,76 @@
namespace ONGR\ElasticsearchBundle\DSL\Query; namespace ONGR\ElasticsearchBundle\DSL\Query;
use ONGR\ElasticsearchBundle\DSL\BuilderInterface; use ONGR\ElasticsearchBundle\DSL\BuilderInterface;
use ONGR\ElasticsearchBundle\DSL\Filter\AbstractFilter; use ONGR\ElasticsearchBundle\DSL\ParametersTrait;
/** /**
* Filtered query class. * Represents Elasticsearch "bool" filter.
*
* @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html
*/ */
class FilteredQuery extends AbstractFilter implements BuilderInterface class FilteredQuery implements BuilderInterface
{ {
use ParametersTrait;
/** /**
* @var Query Used inside filtered area. * @var BuilderInterface Used query inside filtered query.
*/ */
private $query; private $query;
/** /**
* @param Query $query * @var BuilderInterface Used filter inside filtered query.
*/ */
public function __construct($query = null) private $filter;
/**
* @param BuilderInterface $query
* @param BuilderInterface $filter
*/
public function __construct($query = null, $filter = null)
{
if ($query !== null) {
$this->setQuery($query);
}
if ($filter !== null) {
$this->setFilter($filter);
}
}
/**
* Sets query.
*
* @param BuilderInterface $query
*/
public function setQuery(BuilderInterface $query)
{ {
parent::__construct();
$this->query = $query; $this->query = $query;
} }
/** /**
* @return Query * @return BuilderInterface
*/ */
public function getQuery() public function getQuery()
{ {
if ($this->query === null) {
$this->query = new Query();
}
return $this->query; return $this->query;
} }
/** /**
* @param BuilderInterface $query * Sets filter.
*
* @param BuilderInterface $filter
*/ */
public function setQuery(BuilderInterface $query) public function setFilter(BuilderInterface $filter)
{ {
$this->query = $query; $this->filter = $filter;
}
/**
* @return BuilderInterface
*/
public function getFilter()
{
return $this->filter;
} }
/** /**
...@@ -67,12 +98,15 @@ class FilteredQuery extends AbstractFilter implements BuilderInterface ...@@ -67,12 +98,15 @@ class FilteredQuery extends AbstractFilter implements BuilderInterface
public function toArray() public function toArray()
{ {
$output = []; $output = [];
$output['filter'] = parent::toArray();
if ($this->getFilter()) {
$output['filter'][$this->getFilter()->getType()] = $this->getFilter()->toArray();
}
if ($this->query) { if ($this->getQuery()) {
$output['query'][$this->getQuery()->getType()] = $this->getQuery()->toArray(); $output['query'][$this->getQuery()->getType()] = $this->getQuery()->toArray();
} }
return $output; return count($output) > 0 ? $this->processArray($output) : [];
} }
} }
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
namespace ONGR\ElasticsearchBundle\DSL\SearchEndpoint; namespace ONGR\ElasticsearchBundle\DSL\SearchEndpoint;
use ONGR\ElasticsearchBundle\DSL\Filter\BoolFilter;
use ONGR\ElasticsearchBundle\DSL\Query\FilteredQuery; use ONGR\ElasticsearchBundle\DSL\Query\FilteredQuery;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
...@@ -26,7 +27,7 @@ class FilterEndpoint extends QueryEndpoint ...@@ -26,7 +27,7 @@ class FilterEndpoint extends QueryEndpoint
{ {
if ($this->getBuilder()) { if ($this->getBuilder()) {
$query = new FilteredQuery(); $query = new FilteredQuery();
$query->setBoolParameters($this->getParameters()); !$this->isBool() ? : $this->getBuilder()->setParameters($this->getParameters());
$query->setFilter($this->getBuilder()); $query->setFilter($this->getBuilder());
$this->addReference('filtered_query', $query); $this->addReference('filtered_query', $query);
} }
...@@ -39,4 +40,12 @@ class FilterEndpoint extends QueryEndpoint ...@@ -39,4 +40,12 @@ class FilterEndpoint extends QueryEndpoint
{ {
return 1; return 1;
} }
/**
* {@inheritdoc}
*/
protected function getBoolInstance()
{
return new BoolFilter();
}
} }
...@@ -17,7 +17,7 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface; ...@@ -17,7 +17,7 @@ use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
/** /**
* Search post filter dsl endpoint. * Search post filter dsl endpoint.
*/ */
class PostFilterEndpoint extends QueryEndpoint class PostFilterEndpoint extends FilterEndpoint
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}
...@@ -26,7 +26,7 @@ class PostFilterEndpoint extends QueryEndpoint ...@@ -26,7 +26,7 @@ class PostFilterEndpoint extends QueryEndpoint
{ {
if ($this->getBuilder()) { if ($this->getBuilder()) {
$postFilter = new PostFilter(); $postFilter = new PostFilter();
$postFilter->setBoolParameters($this->getParameters()); !$this->isBool() ? : $this->getBuilder()->setParameters($this->getParameters());
$postFilter->setFilter($this->getBuilder()); $postFilter->setFilter($this->getBuilder());
return $postFilter->toArray(); return $postFilter->toArray();
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
namespace ONGR\ElasticsearchBundle\DSL\SearchEndpoint; namespace ONGR\ElasticsearchBundle\DSL\SearchEndpoint;
use ONGR\ElasticsearchBundle\DSL\Bool\Bool;
use ONGR\ElasticsearchBundle\DSL\BuilderInterface; use ONGR\ElasticsearchBundle\DSL\BuilderInterface;
use ONGR\ElasticsearchBundle\DSL\ParametersTrait; use ONGR\ElasticsearchBundle\DSL\ParametersTrait;
use ONGR\ElasticsearchBundle\DSL\Query\BoolQuery;
use ONGR\ElasticsearchBundle\DSL\Query\FilteredQuery; use ONGR\ElasticsearchBundle\DSL\Query\FilteredQuery;
use ONGR\ElasticsearchBundle\Serializer\Normalizer\OrderedNormalizerInterface; use ONGR\ElasticsearchBundle\Serializer\Normalizer\OrderedNormalizerInterface;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
...@@ -27,7 +27,7 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI ...@@ -27,7 +27,7 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI
use ParametersTrait; use ParametersTrait;
/** /**
* @var BuilderInterface|Bool * @var BuilderInterface|BoolQuery
*/ */
private $query; private $query;
...@@ -54,8 +54,8 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI ...@@ -54,8 +54,8 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI
$this->setBuilder($builder); $this->setBuilder($builder);
} else { } else {
$parameters = $this->resolver->resolve(array_filter($parameters)); $parameters = $this->resolver->resolve(array_filter($parameters));
$this->query instanceof Bool ? : $this->convertToBool(); $this->isBool() ? : $this->convertToBool();
$this->query->addToBool($builder, $parameters['bool_type']); $this->query->add($builder, $parameters['bool_type']);
} }
return $this; return $this;
...@@ -123,19 +123,39 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI ...@@ -123,19 +123,39 @@ class QueryEndpoint extends AbstractSearchEndpoint implements OrderedNormalizerI
{ {
$resolver $resolver
->setDefaults( ->setDefaults(
['bool_type' => Bool::MUST] ['bool_type' => BoolQuery::MUST]
); );
} }
/**
* Returns true if query is bool.
*
* @return bool
*/
protected function isBool()
{
return $this->getBuilder() instanceof BoolQuery;
}
/**
* Returns bool instance for this endpoint case.
*
* @return BoolQuery
*/
protected function getBoolInstance()
{
return new BoolQuery();
}
/** /**
* Converts query to bool. * Converts query to bool.
*/ */
private function convertToBool() private function convertToBool()
{ {
$bool = new Bool(); $bool = $this->getBoolInstance();
if ($this->query !== null) { if ($this->query !== null) {
$bool->addToBool($this->query); $bool->add($this->query);
} }
$this->query = $bool; $this->query = $bool;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment