Skip to content
<?php
namespace IQDEV\ElasticSearch\Order;
class OrderField extends Order
{
}
<?php
namespace IQDEV\ElasticSearch\Order;
abstract class OrderType
{
protected static string $code;
public static function getType(): string
{
return static::$code;
}
}
<?php
namespace IQDEV\ElasticSearch;
use IQDEV\ElasticSearch\Document\ProductCollection;
use IQDEV\ElasticSearch\Facet\Collection\FacetResultCollection;
class Result
{
private ProductCollection $products;
private FacetResultCollection $facets;
private int $total = 0;
public function __construct()
{
$this->products = new ProductCollection();
$this->facets = new FacetResultCollection();
}
public function setTotal(int $total): void
{
$this->total = $total;
}
public function getTotal(): int
{
return $this->total;
}
public function getProducts(): ProductCollection
{
return $this->products;
}
public function getFacets(): FacetResultCollection
{
return $this->facets;
}
}
......@@ -13,11 +13,10 @@ final class Aggs implements Esable
private ?Nested $nested = null;
private ?Terms $terms = null;
private ?Stats $stats = null;
private string $key;
public function __construct(string $key)
{
$this->key = $key;
public function __construct(
private string $key
) {
}
public function addAggs(Aggs $aggs): self
......
......@@ -6,11 +6,9 @@ use IQDEV\ElasticSearch\Esable;
final class Stats implements Esable
{
private string $field;
public function __construct(string $field)
{
$this->field = $field;
public function __construct(
private string $field
) {
}
public function es(): array
......
......@@ -7,11 +7,10 @@ use IQDEV\ElasticSearch\Esable;
final class Terms implements Esable
{
private array $options = [];
private string $field;
public function __construct(string $field)
{
$this->field = $field;
public function __construct(
private string $field
) {
}
public function setSize(int $size): self
......
......@@ -7,15 +7,14 @@ use IQDEV\ElasticSearch\Search\Nested;
final class FilterKeywordFacet implements Esable
{
public string $key;
/** @var string|string[] */
public $value;
public function __construct(string $key, $value)
{
$this->key = $key;
$this->value = $value;
/**
* @param string $key
* @param string|array<string> $value
*/
public function __construct(
public string $key,
public string|array $value
) {
}
public function es(): array
......@@ -25,9 +24,8 @@ final class FilterKeywordFacet implements Esable
$nested = new Nested();
$query = new Query();
$query
->filter(new Terms($path . '.facet_code', $this->key))
->filter(new Terms($path . '.facet_value', $this->value));
$query->getFilter()->add(new Terms($path . '.facet_code', $this->key));
$query->getFilter()->add(new Terms($path . '.facet_value', $this->value));
$nested
->setPath($path)
......
......@@ -3,19 +3,16 @@
namespace IQDEV\ElasticSearch\Search\BoolQuery;
use IQDEV\ElasticSearch\Esable;
use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Search\Nested;
use IQDEV\Search\Filter\FilterOperator;
final class FilterNumberFacet implements Esable
{
public string $key;
public array $conditions;
public function __construct(string $key, array $conditions)
{
$this->key = $key;
$this->conditions = $conditions;
public function __construct(
public string $key,
public array $conditions
) {
}
public function es(): array
......@@ -26,32 +23,22 @@ final class FilterNumberFacet implements Esable
$query = new Query();
$query
->filter(new Stats($path.'.facet_code', $this->key));
->getFilter()->add(new Stats($path.'.facet_code', $this->key));
$conditions = [];
foreach ($this->conditions as $operator => $value) {
switch ($operator) {
case FilterOperator::GTE:
$key = 'gte';
break;
case FilterOperator::LTE:
$key = 'lte';
break;
case FilterOperator::GT:
$key = 'gt';
break;
case FilterOperator::LT:
$key = 'lt';
break;
default:
$key = null;
break;
}
$key = in_array(FilterOperator::from($operator), [
FilterOperator::GTE,
FilterOperator::LTE,
FilterOperator::GT,
FilterOperator::LT,
]) ? $operator : null;
if (isset($key)) {
$conditions[$key] = $value;
}
}
$query->filter(new Stats($path.'.facet_value', $conditions));
$query->getFilter()->add(new Stats($path.'.facet_value', $conditions));
$nested
->setPath($path)
......
......@@ -32,43 +32,34 @@ final class Query implements Esable
* @param Terms|Nested $item
* @return $this
*/
public function match($item): self
public function getMatch(): BoolQueryCollection
{
$this->match->add($item);
return $this;
return $this->match;
}
/**
* @param Terms|Nested $item
* @return $this
*/
public function must($item): self
public function getMust(): BoolQueryCollection
{
$this->must->add($item);
return $this;
return $this->must;
}
public function filter(Esable $item): self
public function getFilter(): BoolQueryCollection
{
$this->filter->add($item);
return $this;
return $this->filter;
}
public function should(Esable $item): self
public function setFilter(BoolQueryCollection $filter): BoolQueryCollection
{
$this->should->add($item);
return $this;
return $this->filter;
}
public function mustNot(Esable $item): self
public function getShould(): BoolQueryCollection
{
$this->mustNot->add($item);
return $this->should;
}
return $this;
public function getMustNot(): BoolQueryCollection
{
return $this->mustNot;
}
public function isEmpty(): bool
......@@ -127,4 +118,34 @@ final class Query implements Esable
],
];
}
public function modify(Query $another): self
{
foreach ($another->getMust() as $item) {
$this->getMust()->add($item);
}
foreach ($another->getFilter() as $item) {
$this->getFilter()->add($item);
}
foreach ($another->getShould() as $item) {
$this->getShould()->add($item);
}
foreach ($another->getMustNot() as $item) {
$this->getMustNot()->add($item);
}
foreach ($another->getMatch() as $item) {
$this->getMatch()->add($item);
}
return $this;
}
public function __clone(): void
{
$this->must = clone $this->must;
$this->should = clone $this->should;
$this->filter = clone $this->filter;
$this->mustNot = clone $this->mustNot;
$this->match = clone $this->match;
}
}
......@@ -6,19 +6,14 @@ use IQDEV\ElasticSearch\Esable;
final class Stats implements Esable
{
private string $key;
/**
* @var string|float|string[]|float[]
* @param string $key
* @param string|float|array<string|float> $value
*/
private $value;
/**
* @param string|float|string[]|float[] $value
*/
public function __construct(string $key, $value)
{
$this->key = $key;
$this->value = $value;
public function __construct(
private string $key,
private string|float|array $value
) {
}
public function es(): array
......
......@@ -6,19 +6,14 @@ use IQDEV\ElasticSearch\Esable;
final class Terms implements Esable
{
private string $key;
/**
* @var string|float|string[]|float[]
* @param string $key
* @param string|float|bool|array<string|float> $value
*/
private $value;
/**
* @param string|float|string[]|float[] $value
*/
public function __construct(string $key, $value)
{
$this->key = $key;
$this->value = $value;
public function __construct(
private string $key,
private mixed $value
) {
}
public function es(): array
......
......@@ -6,13 +6,10 @@ use IQDEV\ElasticSearch\Esable;
class Pagination implements Esable
{
private ?int $size;
private ?int $from;
public function __construct(?int $size = null, ?int $from = null)
{
$this->size = $size;
$this->from = $from;
public function __construct(
private ?int $size = null,
private ?int $from = null
) {
}
public function es(): array
......
......@@ -3,7 +3,8 @@
namespace IQDEV\ElasticSearch\Search;
use IQDEV\ElasticSearch\Esable;
use IQDEV\ElasticSearch\Order\OrderCollection;
use IQDEV\ElasticSearch\Criteria\Match\QueryMatchCollection;
use IQDEV\ElasticSearch\Criteria\Order\OrderCollection;
use IQDEV\ElasticSearch\Search\Aggs\AggsCollection;
use IQDEV\ElasticSearch\Search\BoolQuery\Query;
......@@ -14,7 +15,7 @@ final class Request implements Esable
private ?AggsCollection $aggs = null;
private ?Pagination $pagination = null;
private ?OrderCollection $sort = null;
private array $match = [];
private ?QueryMatchCollection $matchCollection = null;
private ?array $source = null;
public function setPagination(?Pagination $pagination): self
......@@ -33,6 +34,13 @@ final class Request implements Esable
return $this->query;
}
public function setQuery(Query $query): self
{
$this->query = $query;
return $this;
}
public function getPostFilter(): Query
{
if (null === $this->postFilter) {
......@@ -42,6 +50,13 @@ final class Request implements Esable
return $this->postFilter;
}
public function setPostFilter(Query $query): self
{
$this->postFilter = $query;
return $this;
}
public function getAggs(): AggsCollection
{
if (null === $this->aggs) {
......@@ -51,16 +66,25 @@ final class Request implements Esable
return $this->aggs;
}
public function getPagination(): ?Pagination
public function setAggs(AggsCollection $aggs): self
{
return $this->pagination;
$this->aggs = $aggs;
return $this;
}
public function addMatch(string $key, array $param): self
public function getQueryMatch(): QueryMatchCollection
{
$this->match[$key] = $param;
if (null === $this->matchCollection) {
$this->matchCollection = new QueryMatchCollection();
}
return $this;
return $this->matchCollection;
}
public function getPagination(): ?Pagination
{
return $this->pagination;
}
public function setSource(array $s): self
......@@ -95,10 +119,8 @@ final class Request implements Esable
$request['query'] = $this->query->es()['query'];
}
if (false === empty($this->match)) {
foreach ($this->match as $key => $value) {
$request['query']['match'][$key] = $value;
}
if ($this->matchCollection && false === $this->matchCollection->isEmpty()) {
$request['query']['match'] = $this->matchCollection->es();
}
if ($this->aggs) {
......
......@@ -5,24 +5,20 @@ namespace IQDEV\ElasticSearch;
use Elastic\Elasticsearch\Client;
use Elastic\Elasticsearch\Exception\ClientResponseException;
use Elastic\Elasticsearch\Exception\ServerResponseException;
use IQDEV\ElasticSearch\Converter\CriteriaToEsRequest;
use IQDEV\ElasticSearch\Converter\EsResponseToResult;
use IQDEV\Search\Criteria;
use IQDEV\Search\Result;
use IQDEV\ElasticSearch\Converter\Request\CriteriaToRequest;
use IQDEV\ElasticSearch\Converter\Result\EsResponseToResult;
use IQDEV\ElasticSearch\Criteria\Criteria;
class SearchService implements \IQDEV\Search\SearchService
class SearchService implements Searchable
{
private Client $esClient;
private Configuration $configuration;
private CriteriaToEsRequest $criteriaToEsRequest;
private CriteriaToRequest $criteriaToRequest;
private EsResponseToResult $esResponseToResult;
public function __construct(Client $esClient, Configuration $configuration)
{
$this->esClient = $esClient;
$this->configuration = $configuration;
$this->criteriaToEsRequest = new CriteriaToEsRequest();
public function __construct(
private Client $esClient,
private Configuration $configuration
) {
$this->criteriaToRequest = new CriteriaToRequest($this->configuration);
$this->esResponseToResult = new EsResponseToResult();
}
......@@ -32,7 +28,7 @@ class SearchService implements \IQDEV\Search\SearchService
*/
public function search(Criteria $criteria): Result
{
$request = $this->criteriaToEsRequest->fromCriteria($criteria);
$request = $this->criteriaToRequest->fromCriteria($criteria);
$response = $this->esClient->search([
'index' => $this->configuration->getIndexName(),
......
<?php
namespace IQDEV\ElasticSearch;
use IQDEV\ElasticSearch\Criteria\Criteria;
interface Searchable
{
/**
* @param Criteria $criteria
*
* @return Result
*/
public function search(Criteria $criteria): Result;
}
......@@ -2,19 +2,20 @@
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Criteria\Filter\LogicOperator;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterNumber;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Filter\FilterType;
use IQDEV\Search\Filter\LogicOperator;
use IQDEV\Search\Query\SearchQuery;
/**
* Тестирование агрегирующих функций
......@@ -24,16 +25,11 @@ class AggsTest extends AbstractTestCase
public function testEmptyFilterByCategory()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$q = new SearchQuery($criteria);
......@@ -146,22 +142,17 @@ class AggsTest extends AbstractTestCase
public function testEmptyKeywordFilter()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('white')
)
]));
......@@ -275,22 +266,16 @@ class AggsTest extends AbstractTestCase
public function testRangeFilter()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104.50)
)
]));
......@@ -403,30 +388,25 @@ class AggsTest extends AbstractTestCase
public function testCombineFilter()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('black')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104)
)
]));
......@@ -538,30 +518,25 @@ class AggsTest extends AbstractTestCase
public function testCombineFilterTwo()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(105)
)
]));
......@@ -675,38 +650,33 @@ class AggsTest extends AbstractTestCase
public function testKeywordFilter()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('white')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber(100)
)
]));
......@@ -820,40 +790,35 @@ class AggsTest extends AbstractTestCase
public function testKeywordFilterTwo()
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
't-short',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('white')
)
]));
$criteria->filters()->add(
$criteria->getFilters()->add(
(new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('reebok')
)
]))
->setLogicalType(LogicOperator::or())
->setLogicOperator(LogicOperator::OR)
);
......
<?php
namespace IQDEV\ElasticSearchTests\FIlter;
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterNumber;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Query\SearchQuery;
class CommonRangeKeywordsTest extends AbstractTestCase
{
......@@ -25,18 +25,18 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber(102)
)
]));
......@@ -65,18 +65,18 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber(102)
)
]));
......@@ -105,23 +105,23 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(101)
),
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104)
),
]));
......
......@@ -4,14 +4,14 @@ namespace IQDEV\ElasticSearchTests\Filter;
use Elastic\Elasticsearch\Client;
use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Converter\EsResponseToResult;
use IQDEV\ElasticSearch\Converter\Result\EsResponseToResult;
use IQDEV\ElasticSearch\Indexer\IndexRunner;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Config\ChangingStateConfiguration;
use IQDEV\ElasticSearchTests\Factory\ClientFactory;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Helpers\TestIndexProvider;
use Psr\Log\Test\TestLogger;
use Psr\Log\NullLogger;
class IndexesTest extends AbstractTestCase
{
......@@ -40,7 +40,7 @@ class IndexesTest extends AbstractTestCase
$this->indexRunner = new IndexRunner(
$this->esClient,
$this->configuration,
new TestLogger()
new NullLogger()
);
}
......
......@@ -2,17 +2,18 @@
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Filter\FilterType;
use IQDEV\Search\Query\SearchQuery;
class KeywordsTest extends AbstractTestCase
{
......@@ -25,10 +26,10 @@ class KeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('')
)
]));
......@@ -55,10 +56,10 @@ class KeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
......@@ -87,22 +88,17 @@ class KeywordsTest extends AbstractTestCase
public function testExistByFilterAndCategory(): void
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('shoes')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
'shoes',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
)
]));
......@@ -131,15 +127,15 @@ class KeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
),
new Filter(
new Field('size'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('xxl')
)
]));
......@@ -166,15 +162,15 @@ class KeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
),
new Filter(
new Field('size'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('xl')
)
]));
......@@ -203,26 +199,22 @@ class KeywordsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('prices')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
'prices',
),
);
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
),
new Filter(
new Field('size'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('xl')
)
]));
......
......@@ -2,19 +2,19 @@
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Criteria\Filter\FilterType;
use IQDEV\ElasticSearch\Criteria\Filter\LogicOperator;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Filter\Field;
use IQDEV\Search\Filter\Filter;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Filter\FilterKeyword;
use IQDEV\Search\Filter\FilterNumber;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Filter\FilterType;
use IQDEV\Search\Filter\LogicOperator;
use IQDEV\Search\Query\SearchQuery;
class QueryAndPostFilterTest extends AbstractTestCase
{
......@@ -28,12 +28,12 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('not')
)
]);
$filterCollectionBrand->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionBrand->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
......@@ -59,12 +59,12 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('adidas')
)
]);
$filterCollectionBrand->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
$filterCollectionBrand->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
......@@ -177,28 +177,28 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('adidas')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
......@@ -342,23 +342,23 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('white')
),
]);
$criteria->filters()->add($filterCollectionColor);
$criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
......@@ -482,38 +482,38 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('rebook')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('white')
),
]);
$filterCollectionColor->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionColor);
$filterCollectionColor->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
......@@ -625,39 +625,38 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('rebook')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
),
]);
$criteria->filters()->add($filterCollectionColor);
$criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
......@@ -798,12 +797,12 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(108)
)
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
......@@ -829,12 +828,12 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(105)
)
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
......@@ -948,17 +947,17 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(104)
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$filterCollection->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollection);
$filterCollection->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollection);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
......@@ -1070,26 +1069,26 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(104)
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$filterCollection->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollection);
$filterCollection->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollection);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('red')
),
]);
$criteria->filters()->add($filterCollectionColor);
$criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
......@@ -1200,48 +1199,48 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('green')
),
]);
$criteria->filters()->add($filterCollectionColor);
$criteria->getFilters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
]);
$criteria->filters()->add($filterCollectionBrand);
$criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria);
......@@ -1371,39 +1370,39 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(102)
),
]);
$criteria->filters()->add($filterCollectionPrice);
$criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
......@@ -1534,48 +1533,48 @@ class QueryAndPostFilterTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(104)
),
]);
$filterCollectionPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionPrice);
$filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('nike')
),
new Filter(
new Field('brand'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('adidas')
),
]);
$filterCollectionBrand
->setLogicalType(LogicOperator::or())
->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionBrand);
->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(101)
),
]);
$criteria->filters()->add($filterCollectionPrice);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionColor = new FilterGroupCollection([
new Filter(
new Field('color'),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword('green')
),
]);
$criteria->filters()->add($filterCollectionColor);
$criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria);
......