Skip to content

Commit

Permalink
Restructure queries (ongr-io#195)
Browse files Browse the repository at this point in the history
* move queries to specific domain level folder

* fixed namespaces

* added deprecation messages
  • Loading branch information
saimaz authored Jan 27, 2017
1 parent 645d1ea commit a5d77e6
Show file tree
Hide file tree
Showing 71 changed files with 2,698 additions and 1,911 deletions.
113 changes: 3 additions & 110 deletions src/Query/BoolQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,120 +11,13 @@

namespace ONGR\ElasticsearchDSL\Query;

use ONGR\ElasticsearchDSL\BuilderInterface;
use ONGR\ElasticsearchDSL\ParametersTrait;
use Ramsey\Uuid\Uuid;

/**
* Represents Elasticsearch "bool" query.
*
* @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
*
* @deprecated Use the extended class instead. This class is left only for BC compatibility.
*/
class BoolQuery implements BuilderInterface
class BoolQuery extends \ONGR\ElasticsearchDSL\Query\Compound\BoolQuery
{
use ParametersTrait;

const MUST = 'must';
const MUST_NOT = 'must_not';
const SHOULD = 'should';
const FILTER = 'filter';

/**
* @var array
*/
private $container = [];

/**
* Constructor to prepare container.
*/
public function __construct()
{
$this->container = [];
}

/**
* Returns the query instances (by bool type).
*
* @param string|null $boolType
*
* @return array
*/
public function getQueries($boolType = null)
{
if ($boolType === null) {
$queries = [];

foreach ($this->container as $item) {
$queries = array_merge($queries, $item);
}

return $queries;
}

if (isset($this->container[$boolType])) {
return $this->container[$boolType];
}

return [];
}

/**
* Add BuilderInterface object to bool operator.
*
* @param BuilderInterface $query Query add to the bool.
* @param string $type Bool type. Example: must, must_not, should.
* @param string $key Key that indicates a builder id.
*
* @return string Key of added builder.
*
* @throws \UnexpectedValueException
*/
public function add(BuilderInterface $query, $type = self::MUST, $key = null)
{
if (!in_array($type, [self::MUST, self::MUST_NOT, self::SHOULD, self::FILTER])) {
throw new \UnexpectedValueException(sprintf('The bool operator %s is not supported', $type));
}

if (!$key) {
$key = bin2hex(random_bytes(30));
}

$this->container[$type][$key] = $query;

return $key;
}

/**
* {@inheritdoc}
*/
public function toArray()
{
if (count($this->container) === 1 && isset($this->container[self::MUST])
&& count($this->container[self::MUST]) === 1) {
$query = reset($this->container[self::MUST]);

return $query->toArray();
}

$output = [];

foreach ($this->container as $boolType => $builders) {
/** @var BuilderInterface $builder */
foreach ($builders as $builder) {
$output[$boolType][] = $builder->toArray();
}
}

$output = $this->processArray($output);

return [$this->getType() => $output];
}

/**
* {@inheritdoc}
*/
public function getType()
{
return 'bool';
}
}
54 changes: 3 additions & 51 deletions src/Query/BoostingQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,61 +11,13 @@

namespace ONGR\ElasticsearchDSL\Query;

use ONGR\ElasticsearchDSL\BuilderInterface;

/**
* Represents Elasticsearch "boosting" query.
*
* @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html
*
* @deprecated Use the extended class instead. This class is left only for BC compatibility.
*/
class BoostingQuery implements BuilderInterface
class BoostingQuery extends \ONGR\ElasticsearchDSL\Query\Compound\BoostingQuery
{
/**
* @var BuilderInterface
*/
private $positive;

/**
* @var BuilderInterface
*/
private $negative;

/**
* @var int|float
*/
private $negativeBoost;

/**
* @param BuilderInterface $positive
* @param BuilderInterface $negative
* @param int|float $negativeBoost
*/
public function __construct(BuilderInterface $positive, BuilderInterface $negative, $negativeBoost)
{
$this->positive = $positive;
$this->negative = $negative;
$this->negativeBoost = $negativeBoost;
}

/**
* {@inheritdoc}
*/
public function getType()
{
return 'boosting';
}

/**
* {@inheritdoc}
*/
public function toArray()
{
$query = [
'positive' => $this->positive->toArray(),
'negative' => $this->negative->toArray(),
'negative_boost' => $this->negativeBoost,
];

return [$this->getType() => $query];
}
}
54 changes: 3 additions & 51 deletions src/Query/CommonTermsQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,61 +11,13 @@

namespace ONGR\ElasticsearchDSL\Query;

use ONGR\ElasticsearchDSL\BuilderInterface;
use ONGR\ElasticsearchDSL\ParametersTrait;

/**
* Represents Elasticsearch "common" query.
*
* @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-common-terms-query.html
*
* @deprecated Use the extended class instead. This class is left only for BC compatibility.
*/
class CommonTermsQuery implements BuilderInterface
class CommonTermsQuery extends \ONGR\ElasticsearchDSL\Query\FullText\CommonTermsQuery
{
use ParametersTrait;

/**
* @var string
*/
private $field;

/**
* @var string
*/
private $query;

/**
* @param string $field
* @param string $query
* @param array $parameters
*/
public function __construct($field, $query, array $parameters = [])
{
$this->field = $field;
$this->query = $query;
$this->setParameters($parameters);
}

/**
* {@inheritdoc}
*/
public function getType()
{
return 'common';
}

/**
* {@inheritdoc}
*/
public function toArray()
{
$query = [
'query' => $this->query,
];

$output = [
$this->field => $this->processArray($query),
];

return [$this->getType() => $output];
}
}
129 changes: 129 additions & 0 deletions src/Query/Compound/BoolQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<?php

/*
* This file is part of the ONGR package.
*
* (c) NFQ Technologies UAB <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace ONGR\ElasticsearchDSL\Query\Compound;

use ONGR\ElasticsearchDSL\BuilderInterface;
use ONGR\ElasticsearchDSL\ParametersTrait;

/**
* Represents Elasticsearch "bool" query.
*
* @link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
*/
class BoolQuery implements BuilderInterface
{
use ParametersTrait;

const MUST = 'must';
const MUST_NOT = 'must_not';
const SHOULD = 'should';
const FILTER = 'filter';

/**
* @var array
*/
private $container = [];

/**
* Constructor to prepare container.
*/
public function __construct()
{
$this->container = [];
}

/**
* Returns the query instances (by bool type).
*
* @param string|null $boolType
*
* @return array
*/
public function getQueries($boolType = null)
{
if ($boolType === null) {
$queries = [];

foreach ($this->container as $item) {
$queries = array_merge($queries, $item);
}

return $queries;
}

if (isset($this->container[$boolType])) {
return $this->container[$boolType];
}

return [];
}

/**
* Add BuilderInterface object to bool operator.
*
* @param BuilderInterface $query Query add to the bool.
* @param string $type Bool type. Example: must, must_not, should.
* @param string $key Key that indicates a builder id.
*
* @return string Key of added builder.
*
* @throws \UnexpectedValueException
*/
public function add(BuilderInterface $query, $type = self::MUST, $key = null)
{
if (!in_array($type, [self::MUST, self::MUST_NOT, self::SHOULD, self::FILTER])) {
throw new \UnexpectedValueException(sprintf('The bool operator %s is not supported', $type));
}

if (!$key) {
$key = bin2hex(random_bytes(30));
}

$this->container[$type][$key] = $query;

return $key;
}

/**
* {@inheritdoc}
*/
public function toArray()
{
if (count($this->container) === 1 && isset($this->container[self::MUST])
&& count($this->container[self::MUST]) === 1) {
$query = reset($this->container[self::MUST]);

return $query->toArray();
}

$output = [];

foreach ($this->container as $boolType => $builders) {
/** @var BuilderInterface $builder */
foreach ($builders as $builder) {
$output[$boolType][] = $builder->toArray();
}
}

$output = $this->processArray($output);

return [$this->getType() => $output];
}

/**
* {@inheritdoc}
*/
public function getType()
{
return 'bool';
}
}
Loading

0 comments on commit a5d77e6

Please sign in to comment.