Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Showing
with 1072 additions and 366 deletions
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
namespace IQDEV\ElasticSearch\Search; namespace IQDEV\ElasticSearch\Search;
use IQDEV\ElasticSearch\Esable; 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\Aggs\AggsCollection;
use IQDEV\ElasticSearch\Search\BoolQuery\Query; use IQDEV\ElasticSearch\Search\BoolQuery\Query;
...@@ -14,7 +15,7 @@ final class Request implements Esable ...@@ -14,7 +15,7 @@ final class Request implements Esable
private ?AggsCollection $aggs = null; private ?AggsCollection $aggs = null;
private ?Pagination $pagination = null; private ?Pagination $pagination = null;
private ?OrderCollection $sort = null; private ?OrderCollection $sort = null;
private array $match = []; private ?QueryMatchCollection $matchCollection = null;
private ?array $source = null; private ?array $source = null;
public function setPagination(?Pagination $pagination): self public function setPagination(?Pagination $pagination): self
...@@ -33,6 +34,13 @@ final class Request implements Esable ...@@ -33,6 +34,13 @@ final class Request implements Esable
return $this->query; return $this->query;
} }
public function setQuery(Query $query): self
{
$this->query = $query;
return $this;
}
public function getPostFilter(): Query public function getPostFilter(): Query
{ {
if (null === $this->postFilter) { if (null === $this->postFilter) {
...@@ -42,6 +50,13 @@ final class Request implements Esable ...@@ -42,6 +50,13 @@ final class Request implements Esable
return $this->postFilter; return $this->postFilter;
} }
public function setPostFilter(Query $query): self
{
$this->postFilter = $query;
return $this;
}
public function getAggs(): AggsCollection public function getAggs(): AggsCollection
{ {
if (null === $this->aggs) { if (null === $this->aggs) {
...@@ -51,16 +66,25 @@ final class Request implements Esable ...@@ -51,16 +66,25 @@ final class Request implements Esable
return $this->aggs; 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 public function setSource(array $s): self
...@@ -95,10 +119,8 @@ final class Request implements Esable ...@@ -95,10 +119,8 @@ final class Request implements Esable
$request['query'] = $this->query->es()['query']; $request['query'] = $this->query->es()['query'];
} }
if (false === empty($this->match)) { if ($this->matchCollection && false === $this->matchCollection->isEmpty()) {
foreach ($this->match as $key => $value) { $request['query']['match'] = $this->matchCollection->es();
$request['query']['match'][$key] = $value;
}
} }
if ($this->aggs) { if ($this->aggs) {
......
...@@ -5,19 +5,20 @@ namespace IQDEV\ElasticSearch; ...@@ -5,19 +5,20 @@ namespace IQDEV\ElasticSearch;
use Elastic\Elasticsearch\Client; use Elastic\Elasticsearch\Client;
use Elastic\Elasticsearch\Exception\ClientResponseException; use Elastic\Elasticsearch\Exception\ClientResponseException;
use Elastic\Elasticsearch\Exception\ServerResponseException; use Elastic\Elasticsearch\Exception\ServerResponseException;
use IQDEV\ElasticSearch\Converter\CriteriaToEsRequest; use IQDEV\ElasticSearch\Converter\Request\CriteriaToRequest;
use IQDEV\ElasticSearch\Converter\EsResponseToResult; use IQDEV\ElasticSearch\Converter\Result\EsResponseToResult;
use IQDEV\ElasticSearch\Criteria\Criteria;
class SearchService implements Searchable class SearchService implements Searchable
{ {
private CriteriaToEsRequest $criteriaToEsRequest; private CriteriaToRequest $criteriaToRequest;
private EsResponseToResult $esResponseToResult; private EsResponseToResult $esResponseToResult;
public function __construct( public function __construct(
private Client $esClient, private Client $esClient,
private Configuration $configuration private Configuration $configuration
) { ) {
$this->criteriaToEsRequest = new CriteriaToEsRequest(); $this->criteriaToRequest = new CriteriaToRequest($this->configuration);
$this->esResponseToResult = new EsResponseToResult(); $this->esResponseToResult = new EsResponseToResult();
} }
...@@ -27,13 +28,13 @@ class SearchService implements Searchable ...@@ -27,13 +28,13 @@ class SearchService implements Searchable
*/ */
public function search(Criteria $criteria): Result public function search(Criteria $criteria): Result
{ {
$request = $this->criteriaToEsRequest->fromCriteria($criteria); $request = $this->criteriaToRequest->fromCriteria($criteria);
$response = $this->esClient->search([ $response = $this->esClient->search([
'index' => $this->configuration->getIndexName(), 'index' => $this->configuration->getIndexName(),
'body' => $request->es(), 'body' => $request->es(),
]); ]);
return $this->esResponseToResult->fromResponse($response); return $this->esResponseToResult->fromResponse($response, $this->configuration);
} }
} }
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
namespace IQDEV\ElasticSearch; namespace IQDEV\ElasticSearch;
use IQDEV\ElasticSearch\Criteria\Criteria;
interface Searchable interface Searchable
{ {
/** /**
......
<?php
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Aggs\Aggs;
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\FilterNumber;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
/**
* Тестирование агрегирующих функций для прямых свойств документов
*/
class AggsPropsTest extends AbstractTestCase
{
public function testCategoryAggs()
{
$criteria = new Criteria();
$criteria->getAggs()->add(
new Aggs(
new Property('new')
)
);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h1',
'h2',
'h3',
'p1',
's1',
's2',
's3',
's4',
],
'facets' => [
0 => [
'code' => 'new',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
'label' => null,
'value' => 0,
'count' => 3,
'active' => true
],
1 => [
'label' => null,
'value' => 1,
'count' => 5,
'active' => true
]
],
'range' => []
]
],
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataWFacets($result));
}
public function testCategoryAggsWFilters()
{
$criteria = new Criteria();
$criteria->getAggs()->add(
new Aggs(
new Property('new')
)
);
$criteria->getAggs()->add(
new Aggs(
new Property('rating')
)
);
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field('price'),
FilterOperator::GTE,
new FilterNumber(105)
)
]);
$criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h2',
'h3',
'p1'
],
'facets' => [
0 => [
'code' => 'brand',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
'label' => null,
'value' => 'adidas',
'count' => 0,
'active' => false
],
1 => [
'label' => null,
'value' => 'nike',
'count' => 1,
'active' => true
],
3 => [
'label' => null,
'value' => 'rebook',
'count' => 2,
'active' => true
]
],
'range' => []
]
],
1 => [
'code' => 'color',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
'label' => null,
'value' => 'blue',
'count' => 0,
'active' => false
],
1 => [
'label' => null,
'value' => 'green',
'count' => 0,
'active' => false
],
2 => [
'label' => null,
'value' => 'red',
'count' => 0,
'active' => false
],
3 => [
'label' => null,
'value' => 'white',
'count' => 3,
'active' => true
]
],
'range' => []
]
],
2 => [
'code' => 'size',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
"label" => null,
"value" => "43",
"count" => 0,
"active" => false
],
1 => [
"label" => null,
"value" => "46",
"count" => 0,
"active" => false
],
2 => [
"label" => null,
"value" => "47",
"count" => 0,
"active" => false
],
3 => [
"label" => null,
"value" => "xl",
"count" => 2,
"active" => true
],
4 => [
"label" => null,
"value" => "xxl",
"count" => 1,
"active" => true
],
],
'range' => []
]
],
3 => [
'code' => 'price',
'label' => null,
'type' => 'range',
'items' => [
'list' => [],
'range' => [
0 => [
'label' => null,
'count' => 3,
'active' => true,
'fullRange' => [
'min' => 100.0,
'max' => 107.0
],
'activeRange' => [
'min' => 105.0,
'max' => 107.0
]
]
]
],
],
4 => [
'code' => 'new',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
'label' => null,
'value' => "0",
'count' => 1,
'active' => true
],
1 => [
'label' => null,
'value' => "1",
'count' => 2,
'active' => true
]
],
'range' => []
]
],
5 => [
'code' => 'rating',
'label' => null,
'type' => 'list',
'items' => [
'list' => [
0 => [
'label' => null,
'value' => "3",
'count' => 3,
'active' => true
],
],
'range' => []
]
],
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataWFacets($result));
}
}
...@@ -2,16 +2,17 @@ ...@@ -2,16 +2,17 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\FilterType; use IQDEV\ElasticSearch\Criteria\Filter\LogicOperator;
use IQDEV\ElasticSearch\Filter\LogicOperator; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Filter\Value\FilterNumber; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Query\SearchQuery; use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -24,16 +25,11 @@ class AggsTest extends AbstractTestCase ...@@ -24,16 +25,11 @@ class AggsTest extends AbstractTestCase
public function testEmptyFilterByCategory() public function testEmptyFilterByCategory()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -146,19 +142,14 @@ class AggsTest extends AbstractTestCase ...@@ -146,19 +142,14 @@ class AggsTest extends AbstractTestCase
public function testEmptyKeywordFilter() public function testEmptyKeywordFilter()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -275,19 +266,13 @@ class AggsTest extends AbstractTestCase ...@@ -275,19 +266,13 @@ class AggsTest extends AbstractTestCase
public function testRangeFilter() public function testRangeFilter()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->getFilters()->add(new FilterGroupCollection([
$criteria->filters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LTE, FilterOperator::LTE,
...@@ -403,19 +388,14 @@ class AggsTest extends AbstractTestCase ...@@ -403,19 +388,14 @@ class AggsTest extends AbstractTestCase
public function testCombineFilter() public function testCombineFilter()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -423,7 +403,7 @@ class AggsTest extends AbstractTestCase ...@@ -423,7 +403,7 @@ class AggsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LTE, FilterOperator::LTE,
...@@ -538,19 +518,14 @@ class AggsTest extends AbstractTestCase ...@@ -538,19 +518,14 @@ class AggsTest extends AbstractTestCase
public function testCombineFilterTwo() public function testCombineFilterTwo()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -558,7 +533,7 @@ class AggsTest extends AbstractTestCase ...@@ -558,7 +533,7 @@ class AggsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LTE, FilterOperator::LTE,
...@@ -675,19 +650,14 @@ class AggsTest extends AbstractTestCase ...@@ -675,19 +650,14 @@ class AggsTest extends AbstractTestCase
public function testKeywordFilter() public function testKeywordFilter()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -695,7 +665,7 @@ class AggsTest extends AbstractTestCase ...@@ -695,7 +665,7 @@ class AggsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('brand'), new Field('brand'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -703,7 +673,7 @@ class AggsTest extends AbstractTestCase ...@@ -703,7 +673,7 @@ class AggsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GT, FilterOperator::GT,
...@@ -820,19 +790,14 @@ class AggsTest extends AbstractTestCase ...@@ -820,19 +790,14 @@ class AggsTest extends AbstractTestCase
public function testKeywordFilterTwo() public function testKeywordFilterTwo()
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 't-short',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('t-short')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -840,7 +805,7 @@ class AggsTest extends AbstractTestCase ...@@ -840,7 +805,7 @@ class AggsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add( $criteria->getFilters()->add(
(new FilterGroupCollection([ (new FilterGroupCollection([
new Filter( new Filter(
new Field('brand'), new Field('brand'),
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Filter\Value\FilterNumber; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Query\SearchQuery; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -25,7 +25,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -25,7 +25,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -33,7 +33,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -33,7 +33,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GT, FilterOperator::GT,
...@@ -65,7 +65,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -65,7 +65,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -73,7 +73,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -73,7 +73,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LT, FilterOperator::LT,
...@@ -105,7 +105,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -105,7 +105,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -113,7 +113,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase ...@@ -113,7 +113,7 @@ class CommonRangeKeywordsTest extends AbstractTestCase
) )
])); ]));
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
......
...@@ -4,7 +4,7 @@ namespace IQDEV\ElasticSearchTests\Filter; ...@@ -4,7 +4,7 @@ namespace IQDEV\ElasticSearchTests\Filter;
use Elastic\Elasticsearch\Client; use Elastic\Elasticsearch\Client;
use IQDEV\ElasticSearch\Configuration; use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Converter\EsResponseToResult; use IQDEV\ElasticSearch\Converter\Result\EsResponseToResult;
use IQDEV\ElasticSearch\Indexer\IndexRunner; use IQDEV\ElasticSearch\Indexer\IndexRunner;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Config\ChangingStateConfiguration; use IQDEV\ElasticSearchTests\Config\ChangingStateConfiguration;
...@@ -69,7 +69,7 @@ class IndexesTest extends AbstractTestCase ...@@ -69,7 +69,7 @@ class IndexesTest extends AbstractTestCase
] ]
]); ]);
$esResponseToResult = new EsResponseToResult(); $esResponseToResult = new EsResponseToResult();
$result = $esResponseToResult->fromResponse($response); $result = $esResponseToResult->fromResponse($response, $this->configuration);
unset($updateData['type']); unset($updateData['type']);
$expected = [ $expected = [
...@@ -80,4 +80,4 @@ class IndexesTest extends AbstractTestCase ...@@ -80,4 +80,4 @@ class IndexesTest extends AbstractTestCase
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataProducts($result)); $this->assertEqualsCanonicalizing($expected, FormatData::formatDataProducts($result));
} }
} }
\ No newline at end of file
...@@ -2,14 +2,15 @@ ...@@ -2,14 +2,15 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\FilterType; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Query\SearchQuery; use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -25,7 +26,7 @@ class KeywordsTest extends AbstractTestCase ...@@ -25,7 +26,7 @@ class KeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -55,7 +56,7 @@ class KeywordsTest extends AbstractTestCase ...@@ -55,7 +56,7 @@ class KeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -87,19 +88,14 @@ class KeywordsTest extends AbstractTestCase ...@@ -87,19 +88,14 @@ class KeywordsTest extends AbstractTestCase
public function testExistByFilterAndCategory(): void public function testExistByFilterAndCategory(): void
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 'shoes',
new Field('category_id'), ),
FilterOperator::EQ,
new FilterKeyword('shoes')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -131,7 +127,7 @@ class KeywordsTest extends AbstractTestCase ...@@ -131,7 +127,7 @@ class KeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -166,7 +162,7 @@ class KeywordsTest extends AbstractTestCase ...@@ -166,7 +162,7 @@ class KeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
...@@ -203,18 +199,14 @@ class KeywordsTest extends AbstractTestCase ...@@ -203,18 +199,14 @@ class KeywordsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add( $criteria->getSearch()->add(
(new FilterGroupCollection([ new Search(
new Filter( new Property('category_id'),
new Field('category_id'), 'prices',
FilterOperator::EQ, ),
new FilterKeyword('prices')
)
]))
->setFilterType(FilterType::query())
); );
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('color'), new Field('color'),
FilterOperator::EQ, FilterOperator::EQ,
......
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\FilterType; use IQDEV\ElasticSearch\Criteria\Filter\FilterType;
use IQDEV\ElasticSearch\Filter\LogicOperator; use IQDEV\ElasticSearch\Criteria\Filter\LogicOperator;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Filter\Value\FilterNumber; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Query\SearchQuery; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -32,8 +32,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -32,8 +32,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('not') new FilterKeyword('not')
) )
]); ]);
$filterCollectionBrand->setFilterType(FilterType::query()); $filterCollectionBrand->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -63,8 +63,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -63,8 +63,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('adidas') new FilterKeyword('adidas')
) )
]); ]);
$filterCollectionBrand->setFilterType(FilterType::query()); $filterCollectionBrand->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -188,8 +188,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -188,8 +188,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -198,7 +198,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -198,7 +198,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -348,8 +348,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -348,8 +348,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
new Filter( new Filter(
...@@ -358,7 +358,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -358,7 +358,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('white') new FilterKeyword('white')
), ),
]); ]);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -493,8 +493,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -493,8 +493,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
new Filter( new Filter(
...@@ -503,8 +503,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -503,8 +503,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('white') new FilterKeyword('white')
), ),
]); ]);
$filterCollectionColor->setFilterType(FilterType::query()); $filterCollectionColor->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -513,7 +513,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -513,7 +513,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -636,8 +636,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -636,8 +636,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
...@@ -647,7 +647,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -647,7 +647,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
new Filter( new Filter(
...@@ -656,8 +656,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -656,8 +656,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('red') new FilterKeyword('red')
), ),
]); ]);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
$handler = SearchClient::getInstance(); $handler = SearchClient::getInstance();
...@@ -802,8 +801,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -802,8 +801,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(108) new FilterNumber(108)
) )
]); ]);
$filterCollectionPrice->setFilterType(FilterType::query()); $filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -833,8 +832,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -833,8 +832,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(105) new FilterNumber(105)
) )
]); ]);
$filterCollectionPrice->setFilterType(FilterType::query()); $filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -957,8 +956,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -957,8 +956,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$filterCollection->setFilterType(FilterType::query()); $filterCollection->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollection); $criteria->getFilters()->add($filterCollection);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
$handler = SearchClient::getInstance(); $handler = SearchClient::getInstance();
...@@ -1079,8 +1078,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1079,8 +1078,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$filterCollection->setFilterType(FilterType::query()); $filterCollection->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollection); $criteria->getFilters()->add($filterCollection);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1089,7 +1088,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1089,7 +1088,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('red') new FilterKeyword('red')
), ),
]); ]);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
$handler = SearchClient::getInstance(); $handler = SearchClient::getInstance();
...@@ -1204,8 +1203,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1204,8 +1203,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(104) new FilterNumber(104)
), ),
]); ]);
$filterCollectionPrice->setFilterType(FilterType::query()); $filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1221,8 +1220,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1221,8 +1220,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
...@@ -1232,7 +1231,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1232,7 +1231,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('green') new FilterKeyword('green')
), ),
]); ]);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1241,7 +1240,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1241,7 +1240,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('nike') new FilterKeyword('nike')
), ),
]); ]);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -1375,8 +1374,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1375,8 +1374,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(104) new FilterNumber(104)
), ),
]); ]);
$filterCollectionPrice->setFilterType(FilterType::query()); $filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1392,8 +1391,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1392,8 +1391,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([ $filterCollectionPrice = new FilterGroupCollection([
...@@ -1403,7 +1402,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1403,7 +1402,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(102) new FilterNumber(102)
), ),
]); ]);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -1538,8 +1537,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1538,8 +1537,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(104) new FilterNumber(104)
), ),
]); ]);
$filterCollectionPrice->setFilterType(FilterType::query()); $filterCollectionPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1555,8 +1554,8 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1555,8 +1554,8 @@ class QueryAndPostFilterTest extends AbstractTestCase
]); ]);
$filterCollectionBrand $filterCollectionBrand
->setLogicOperator(LogicOperator::OR) ->setLogicOperator(LogicOperator::OR)
->setFilterType(FilterType::query()); ->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionBrand); $criteria->getFilters()->add($filterCollectionBrand);
$filterCollectionPrice = new FilterGroupCollection([ $filterCollectionPrice = new FilterGroupCollection([
...@@ -1566,7 +1565,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1566,7 +1565,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterNumber(101) new FilterNumber(101)
), ),
]); ]);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionColor = new FilterGroupCollection([ $filterCollectionColor = new FilterGroupCollection([
new Filter( new Filter(
...@@ -1575,7 +1574,7 @@ class QueryAndPostFilterTest extends AbstractTestCase ...@@ -1575,7 +1574,7 @@ class QueryAndPostFilterTest extends AbstractTestCase
new FilterKeyword('green') new FilterKeyword('green')
), ),
]); ]);
$criteria->filters()->add($filterCollectionColor); $criteria->getFilters()->add($filterCollectionColor);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
......
...@@ -2,16 +2,19 @@ ...@@ -2,16 +2,19 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Converter\CriteriaToEsRequest; use IQDEV\ElasticSearch\Config\BaseConfiguration;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Converter\Request\CriteriaToRequest;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterType; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword; use IQDEV\ElasticSearch\Criteria\Filter\FilterType;
use IQDEV\ElasticSearch\Filter\Value\FilterNumber; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Query\SearchQuery; 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\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -23,11 +26,14 @@ class QueryTest extends AbstractTestCase ...@@ -23,11 +26,14 @@ class QueryTest extends AbstractTestCase
{ {
public function testFilterChangeFromPostToQuery() public function testFilterChangeFromPostToQuery()
{ {
$filter = [ $search = [
'category' => [ 'category' => [
'key' => 'category_id', 'key' => 'category_id',
'value' => 'shoes', 'value' => 'shoes',
], ],
];
$filter = [
'brand' => [ 'brand' => [
'key' => 'brand', 'key' => 'brand',
'value' => 'nike', 'value' => 'nike',
...@@ -40,17 +46,16 @@ class QueryTest extends AbstractTestCase ...@@ -40,17 +46,16 @@ class QueryTest extends AbstractTestCase
]; ];
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
new Search(
new Property($search['category']['key']),
$search['category']['value'],
),
);
$filterCollectionCategory = new FilterGroupCollection();
$filterCollectionCategory = new FilterGroupCollection([ $filterCollectionCategory->setFilterType(FilterType::QUERY);
new Filter( $criteria->getFilters()->add($filterCollectionCategory);
new Field($filter['category']['key']),
FilterOperator::EQ,
new FilterKeyword($filter['category']['value'])
)
]);
$filterCollectionCategory->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionCategory);
$filterCollectionBrand = new FilterGroupCollection([ $filterCollectionBrand = new FilterGroupCollection([
new Filter( new Filter(
...@@ -75,25 +80,24 @@ class QueryTest extends AbstractTestCase ...@@ -75,25 +80,24 @@ class QueryTest extends AbstractTestCase
// Формирование фильтра для post // Формирование фильтра для post
$criteriaPost = clone $criteria; $criteriaPost = clone $criteria;
$criteriaPost->filters()->add(clone $filterCollectionPrice); $criteriaPost->getFilters()->add(clone $filterCollectionPrice);
$criteriaPost->filters()->add(clone $filterCollectionBrand); $criteriaPost->getFilters()->add(clone $filterCollectionBrand);
// Формирование фильтра для query // Формирование фильтра для query
$criteriaQuery = clone $criteria; $criteriaQuery = clone $criteria;
$filterTypeQuery = FilterType::query(); $filterTypeQuery = FilterType::QUERY;
$filterCollectionPrice->setFilterType($filterTypeQuery); $filterCollectionPrice->setFilterType($filterTypeQuery);
$filterCollectionBrand->setFilterType($filterTypeQuery); $filterCollectionBrand->setFilterType($filterTypeQuery);
$criteriaQuery->filters()->add(clone $filterCollectionPrice); $criteriaQuery->getFilters()->add(clone $filterCollectionPrice);
$criteriaQuery->filters()->add(clone $filterCollectionBrand); $criteriaQuery->getFilters()->add(clone $filterCollectionBrand);
// Получение классов с данными для запроса в es // Получение классов с данными для запроса в es
$criteriaToEsRequest = new CriteriaToEsRequest(); $criteriaToRequest = new CriteriaToRequest(new BaseConfiguration());
$requestPost = $criteriaToEsRequest->fromCriteria($criteriaPost); $requestPost = $criteriaToRequest->fromCriteria($criteriaPost);
$requestQuery = $criteriaToEsRequest->fromCriteria($criteriaQuery); $requestQuery = $criteriaToRequest->fromCriteria($criteriaQuery);
$expectedFilter = [ $expectedFilter = [
[ [
...@@ -104,18 +108,21 @@ class QueryTest extends AbstractTestCase ...@@ -104,18 +108,21 @@ class QueryTest extends AbstractTestCase
"filter" => [ "filter" => [
[ [
"nested" => [ "nested" => [
"path" => "search_data.keyword_facet", "path" => "search_data.number_facet",
"query" => [ "query" => [
"bool" => [ "bool" => [
"filter" => [ "filter" => [
[ [
"term" => [ "term" => [
"search_data.keyword_facet.facet_code" => $filter['brand']['key'] "search_data.number_facet.facet_code" => $filter['price']['key']
] ]
], ],
[ [
"term" => [ "range" => [
"search_data.keyword_facet.facet_value" => $filter['brand']['value'] "search_data.number_facet.facet_value" => [
"lt" => $filter['price']['min'],
"gt" => $filter['price']['max'],
]
] ]
] ]
] ]
...@@ -136,21 +143,18 @@ class QueryTest extends AbstractTestCase ...@@ -136,21 +143,18 @@ class QueryTest extends AbstractTestCase
"filter" => [ "filter" => [
[ [
"nested" => [ "nested" => [
"path" => "search_data.number_facet", "path" => "search_data.keyword_facet",
"query" => [ "query" => [
"bool" => [ "bool" => [
"filter" => [ "filter" => [
[ [
"term" => [ "term" => [
"search_data.number_facet.facet_code" => $filter['price']['key'] "search_data.keyword_facet.facet_code" => $filter['brand']['key']
] ]
], ],
[ [
"range" => [ "term" => [
"search_data.number_facet.facet_value" => [ "search_data.keyword_facet.facet_value" => $filter['brand']['value']
"lt" => $filter['price']['min'],
"gt" => $filter['price']['max'],
]
] ]
] ]
] ]
...@@ -162,7 +166,7 @@ class QueryTest extends AbstractTestCase ...@@ -162,7 +166,7 @@ class QueryTest extends AbstractTestCase
] ]
] ]
] ]
] ],
]; ];
$expected = [ $expected = [
"query" => [ "query" => [
...@@ -170,7 +174,7 @@ class QueryTest extends AbstractTestCase ...@@ -170,7 +174,7 @@ class QueryTest extends AbstractTestCase
"must" => [ "must" => [
[ [
"term" => [ "term" => [
"category_id" => $filter['category']['value'] "category_id" => $search['category']['value']
] ]
], ],
] ]
...@@ -178,7 +182,6 @@ class QueryTest extends AbstractTestCase ...@@ -178,7 +182,6 @@ class QueryTest extends AbstractTestCase
], ],
]; ];
$this->assertArray( $this->assertArray(
array_merge($expected, [ array_merge($expected, [
"query" => [ "query" => [
...@@ -231,7 +234,7 @@ class QueryTest extends AbstractTestCase ...@@ -231,7 +234,7 @@ class QueryTest extends AbstractTestCase
new FilterNumber($filter['price']['max']) new FilterNumber($filter['price']['max'])
), ),
]); ]);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionQueryPrice = new FilterGroupCollection([ $filterCollectionQueryPrice = new FilterGroupCollection([
...@@ -241,12 +244,12 @@ class QueryTest extends AbstractTestCase ...@@ -241,12 +244,12 @@ class QueryTest extends AbstractTestCase
new FilterNumber($filter['price']['lower']) new FilterNumber($filter['price']['lower'])
), ),
]); ]);
$filterCollectionQueryPrice->setFilterType(FilterType::query()); $filterCollectionQueryPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionQueryPrice); $criteria->getFilters()->add($filterCollectionQueryPrice);
$criteriaToEsRequest = new CriteriaToEsRequest(); $criteriaToRequest = new CriteriaToRequest(new BaseConfiguration());
$request = $criteriaToEsRequest->fromCriteria($criteria); $request = $criteriaToRequest->fromCriteria($criteria);
$expected = [ $expected = [
...@@ -356,7 +359,7 @@ class QueryTest extends AbstractTestCase ...@@ -356,7 +359,7 @@ class QueryTest extends AbstractTestCase
new FilterNumber($filter['price']['min']) new FilterNumber($filter['price']['min'])
) )
]); ]);
$criteria->filters()->add($filterCollectionPrice); $criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionQueryPrice = new FilterGroupCollection([ $filterCollectionQueryPrice = new FilterGroupCollection([
...@@ -366,8 +369,8 @@ class QueryTest extends AbstractTestCase ...@@ -366,8 +369,8 @@ class QueryTest extends AbstractTestCase
new FilterNumber($filter['price']['lower']) new FilterNumber($filter['price']['lower'])
), ),
]); ]);
$filterCollectionQueryPrice->setFilterType(FilterType::query()); $filterCollectionQueryPrice->setFilterType(FilterType::QUERY);
$criteria->filters()->add($filterCollectionQueryPrice); $criteria->getFilters()->add($filterCollectionQueryPrice);
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -487,4 +490,147 @@ class QueryTest extends AbstractTestCase ...@@ -487,4 +490,147 @@ class QueryTest extends AbstractTestCase
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataWFacets($result)); $this->assertEqualsCanonicalizing($expected, FormatData::formatDataWFacets($result));
} }
}
\ No newline at end of file public function testGlobalFilterMinPrice()
{
$filter = [
'price' => [
'key' => 'price',
'lower' => 103,
]
];
$criteria = new Criteria();
$filterCollectionQueryPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
FilterOperator::GTE,
new FilterNumber($filter['price']['lower'])
),
]);
$filterCollectionQueryPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionQueryPrice);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's4',
'h1',
'h2',
'h3',
'p1',
],
"facets" => [
0 => [
"code" => "brand",
"label" => null,
"type" => "list",
"items" => [
"list" => [
0 => [
"label" => null,
"value" => "nike",
"count" => 3,
"active" => true,
],
1 => [
"label" => null,
"value" => "rebook",
"count" => 2,
"active" => true,
]
],
"range" => [],
],
],
1 => [
"code" => "color",
"label" => null,
"type" => "list",
"items" => [
"list" => [
0 => [
"label" => null,
"value" => "green",
"count" => 1,
"active" => true,
],
1 => [
"label" => null,
"value" => "red",
"count" => 1,
"active" => true,
],
2 => [
"label" => null,
"value" => "white",
"count" => 3,
"active" => true,
],
],
"range" => [],
],
],
2 => [
"code" => "size",
"label" => null,
"type" => "list",
"items" => [
"list" => [
0 => [
"label" => null,
"count" => 1,
"value" => "43",
"active" => true,
],
1 => [
"label" => null,
"value" => "xl",
"count" => 3,
"active" => true,
],
2 => [
"label" => null,
"value" => "xxl",
"count" => 1,
"active" => true,
],
],
"range" => [],
],
],
3 => [
"code" => "price",
"label" => null,
"type" => "range",
"items" => [
"list" => [],
"range" => [
0 => [
"label" => null,
"count" => 5,
"active" => true,
"fullRange" => [
"min" => 103.0,
"max" => 107.0,
],
"activeRange" => [
"min" => 103.0,
"max" => 107.0,
]
]
]
]
]
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataWFacets($result));
}
}
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Filter\Collection\FilterGroupCollection;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Filter\Field;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Criteria\Filter\Filter;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Criteria\Filter\FilterOperator;
use IQDEV\ElasticSearch\Filter\Value\FilterNumber; use IQDEV\ElasticSearch\Criteria\Filter\Value\FilterNumber;
use IQDEV\ElasticSearch\Query\SearchQuery; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -24,7 +24,7 @@ class RangeTest extends AbstractTestCase ...@@ -24,7 +24,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
...@@ -60,7 +60,7 @@ class RangeTest extends AbstractTestCase ...@@ -60,7 +60,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GT, FilterOperator::GT,
...@@ -95,7 +95,7 @@ class RangeTest extends AbstractTestCase ...@@ -95,7 +95,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GT, FilterOperator::GT,
...@@ -131,7 +131,7 @@ class RangeTest extends AbstractTestCase ...@@ -131,7 +131,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LTE, FilterOperator::LTE,
...@@ -165,7 +165,7 @@ class RangeTest extends AbstractTestCase ...@@ -165,7 +165,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LT, FilterOperator::LT,
...@@ -199,7 +199,7 @@ class RangeTest extends AbstractTestCase ...@@ -199,7 +199,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::LT, FilterOperator::LT,
...@@ -232,7 +232,7 @@ class RangeTest extends AbstractTestCase ...@@ -232,7 +232,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
...@@ -270,7 +270,7 @@ class RangeTest extends AbstractTestCase ...@@ -270,7 +270,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
...@@ -307,7 +307,7 @@ class RangeTest extends AbstractTestCase ...@@ -307,7 +307,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
...@@ -344,7 +344,7 @@ class RangeTest extends AbstractTestCase ...@@ -344,7 +344,7 @@ class RangeTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([ $criteria->getFilters()->add(new FilterGroupCollection([
new Filter( new Filter(
new Field('price'), new Field('price'),
FilterOperator::GTE, FilterOperator::GTE,
......
...@@ -2,14 +2,11 @@ ...@@ -2,14 +2,11 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria; use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Filter\Collection\FilterGroupCollection; use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Filter\Field; use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Filter\Filter; use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearch\Filter\FilterOperator; use IQDEV\ElasticSearch\Document\Property\PropertyType;
use IQDEV\ElasticSearch\Filter\FilterType;
use IQDEV\ElasticSearch\Filter\Value\FilterKeyword;
use IQDEV\ElasticSearch\Query\SearchQuery;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
...@@ -24,16 +21,11 @@ class SearchItemsTest extends AbstractTestCase ...@@ -24,16 +21,11 @@ class SearchItemsTest extends AbstractTestCase
public function testExistByCategory(): void public function testExistByCategory(): void
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->getSearch()->add(
$criteria->filters()->add( new Search(
(new FilterGroupCollection([ new Property('category_id'),
new Filter( 'prices'
new Field('category_id'), )
FilterOperator::EQ,
new FilterKeyword('prices')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -60,15 +52,11 @@ class SearchItemsTest extends AbstractTestCase ...@@ -60,15 +52,11 @@ class SearchItemsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add( $criteria->getSearch()->add(
(new FilterGroupCollection([ new Search(
new Filter( new Property('category_id'),
new Field('category_id'), '',
FilterOperator::EQ, )
new FilterKeyword('')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -124,15 +112,11 @@ class SearchItemsTest extends AbstractTestCase ...@@ -124,15 +112,11 @@ class SearchItemsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add( $criteria->getSearch()->add(
(new FilterGroupCollection([ new Search(
new Filter( new Property('full_search_content', PropertyType::TEXT),
new Field('search'), 'Nike'
FilterOperator::EQ, )
new FilterKeyword('Nike')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -161,15 +145,11 @@ class SearchItemsTest extends AbstractTestCase ...@@ -161,15 +145,11 @@ class SearchItemsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add( $criteria->getSearch()->add(
(new FilterGroupCollection([ new Search(
new Filter( new Property('full_search_content', PropertyType::TEXT),
new Field('search'), 'Nike Dri-FIT Strike',
FilterOperator::EQ, ),
new FilterKeyword('Nike Dri-FIT Strike')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -198,15 +178,11 @@ class SearchItemsTest extends AbstractTestCase ...@@ -198,15 +178,11 @@ class SearchItemsTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->filters()->add( $criteria->getSearch()->add(
(new FilterGroupCollection([ new Search(
new Filter( new Property('full_search_content', PropertyType::TEXT),
new Field('search'), 'Товар с ценой',
FilterOperator::EQ, ),
new FilterKeyword('Товар с ценой')
)
]))
->setFilterType(FilterType::query())
); );
$q = new SearchQuery($criteria); $q = new SearchQuery($criteria);
...@@ -214,7 +190,6 @@ class SearchItemsTest extends AbstractTestCase ...@@ -214,7 +190,6 @@ class SearchItemsTest extends AbstractTestCase
$handler = SearchClient::getInstance(); $handler = SearchClient::getInstance();
$result = $handler->handle($q)->result; $result = $handler->handle($q)->result;
$expected = [ $expected = [
'hits' => [ 'hits' => [
'p1', 'p1',
...@@ -223,4 +198,4 @@ class SearchItemsTest extends AbstractTestCase ...@@ -223,4 +198,4 @@ class SearchItemsTest extends AbstractTestCase
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result)); $this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
} }
} }
\ No newline at end of file
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
namespace IQDEV\ElasticSearchTests\Filter; namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Order\OrderDirection;
use IQDEV\ElasticSearch\Criteria\Order\OrderFactory;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Document\Property\Property; use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearch\Order\OrderDirection; use IQDEV\ElasticSearch\Document\Property\PropertyType;
use IQDEV\ElasticSearch\Order\OrderFactory;
use IQDEV\ElasticSearchTests\AbstractTestCase; use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData; use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient; use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\ElasticSearch\Criteria;
use IQDEV\ElasticSearch\Document\Property\PropertyType;
use IQDEV\ElasticSearch\Query\SearchQuery;
class SortTest extends AbstractTestCase class SortTest extends AbstractTestCase
{ {
...@@ -23,7 +23,7 @@ class SortTest extends AbstractTestCase ...@@ -23,7 +23,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('category_id'), OrderDirection::ASC) OrderFactory::createByProperty(new Property('category_id'), OrderDirection::ASC)
); );
...@@ -58,7 +58,7 @@ class SortTest extends AbstractTestCase ...@@ -58,7 +58,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('category_id'), OrderDirection::DESC) OrderFactory::createByProperty(new Property('category_id'), OrderDirection::DESC)
); );
...@@ -93,7 +93,7 @@ class SortTest extends AbstractTestCase ...@@ -93,7 +93,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::ASC) OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::ASC)
); );
...@@ -128,7 +128,7 @@ class SortTest extends AbstractTestCase ...@@ -128,7 +128,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::DESC) OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::DESC)
); );
...@@ -163,7 +163,7 @@ class SortTest extends AbstractTestCase ...@@ -163,7 +163,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::ASC) OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::ASC)
); );
...@@ -198,7 +198,7 @@ class SortTest extends AbstractTestCase ...@@ -198,7 +198,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::DESC) OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::DESC)
); );
...@@ -233,7 +233,7 @@ class SortTest extends AbstractTestCase ...@@ -233,7 +233,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::ASC) OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::ASC)
); );
...@@ -268,7 +268,7 @@ class SortTest extends AbstractTestCase ...@@ -268,7 +268,7 @@ class SortTest extends AbstractTestCase
{ {
$criteria = new Criteria(); $criteria = new Criteria();
$criteria->sorting()->add( $criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::DESC) OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::DESC)
); );
......
<?php
declare(strict_types=1);
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\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;
class UpdatedSearchTest extends AbstractTestCase
{
/**
* Поиск по свойству nested
*
* @return void
*/
public function testSearchByNestedProperty(): void
{
$criteria = new Criteria();
$criteria->getSearch()->add(
new Search(
new Property('brand'),
'rebook',
),
);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's3',
'h3',
'p1'
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* Поиск по nested полю и обычному свойству одноврмененно
*
* @return void
*/
public function testSearchByNestedAndNonNestedProperty(): void
{
$criteria = new Criteria();
$criteria->getSearch()->add(
new Search(
new Property('brand'),
'rebook',
),
);
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
'prices',
),
);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'p1'
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
/**
* Поиск по нескольким nested полям
*
* @return void
*/
public function testSearchByDifferentNestedProperty(): void
{
$criteria = new Criteria();
$criteria->getSearch()->add(
new Search(
new Property('brand'),
'rebook',
),
);
$criteria->getSearch()->add(
new Search(
new Property('color'),
'white',
),
);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'h3',
'p1'
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
public function testQueryNonNested(): void
{
$criteria = new Criteria();
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('category_id'),
FilterOperator::CONTAINS,
new FilterKeyword('shoes'),
)
]);
$criteria->getFilters()->add($filterCollection);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's1',
's2',
's3',
's4',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
public function testQueryNonNestedMoreLogicOr(): void
{
$criteria = new Criteria();
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('category_id'),
FilterOperator::CONTAINS,
new FilterKeyword('shoes'),
),
new Filter(
new Field('category_id'),
FilterOperator::CONTAINS,
new FilterKeyword('t-short'),
),
]);
$filterCollection->setLogicOperator(LogicOperator::OR);
$criteria->getFilters()->add($filterCollection);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's1',
's2',
's3',
's4',
'h1',
'h2',
'h3',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
public function testQueryNonNestedMoreLogicAnd(): void
{
$criteria = new Criteria();
$filterCollection = new FilterGroupCollection([
new Filter(
new Field('category_id'),
FilterOperator::CONTAINS,
new FilterKeyword('shoes'),
),
new Filter(
new Field('category_id'),
FilterOperator::CONTAINS,
new FilterKeyword('t-short'),
),
]);
$criteria->getFilters()->add($filterCollection);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
public function testMustNotNestedFilter(): void
{
$criteria = new Criteria();
$group = new FilterGroupCollection([
new Filter(
new Field('brand'),
FilterOperator::EQ,
new FilterKeyword('adidas'),
)
]);
$group->setLogicOperator(LogicOperator::NOT);
$criteria->getFilters()->add($group);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's3',
's4',
'h1',
'h2',
'h3',
'p1',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
public function testMustNotPropertyFilter(): void
{
$criteria = new Criteria();
$group = new FilterGroupCollection([
new Filter(
new Field('category_id'),
FilterOperator::EQ,
new FilterKeyword('prices'),
)
]);
$group->setLogicOperator(LogicOperator::NOT);
$criteria->getFilters()->add($group);
$q = new SearchQuery($criteria);
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
's1',
's2',
's3',
's4',
'h1',
'h2',
'h3',
]
];
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
}
...@@ -61,6 +61,9 @@ class TestIndexProvider implements IndexProvider ...@@ -61,6 +61,9 @@ class TestIndexProvider implements IndexProvider
} }
} }
$document->setByConfiguration($this->configuration, 'new', $product['new']);
$document->setByConfiguration($this->configuration, 'rating', $product['rating']);
$product['type'] = $product['type'] ?? null; $product['type'] = $product['type'] ?? null;
switch ($product['type']) { switch ($product['type']) {
case 'update': case 'update':
...@@ -119,4 +122,4 @@ class TestIndexProvider implements IndexProvider ...@@ -119,4 +122,4 @@ class TestIndexProvider implements IndexProvider
{ {
return null; return null;
} }
} }
\ No newline at end of file
...@@ -33,52 +33,76 @@ class DefaultSeed ...@@ -33,52 +33,76 @@ class DefaultSeed
'id' => 's1', 'id' => 's1',
'name' => 'Кроссовки NMD_R1 Boba Fett Spectoo', 'name' => 'Кроссовки NMD_R1 Boba Fett Spectoo',
'category' => 'shoes', 'category' => 'shoes',
'properties' => ['brand' => 'adidas', 'color' => 'green', 'size' => 46,'price' => 100] 'properties' => ['brand' => 'adidas', 'color' => 'green', 'size' => 46,'price' => 100],
'year' => 2014,
'new' => false,
'rating' => 3,
], ],
[ [
'id' => 's2', 'id' => 's2',
'name' => 'КРОССОВКИ ULTRABOOST 5.0 DNA', 'name' => 'КРОССОВКИ ULTRABOOST 5.0 DNA',
'category' => 'shoes', 'category' => 'shoes',
'properties' => ['brand' => 'adidas', 'color' => 'red', 'size' => 47,'price' => 101] 'properties' => ['brand' => 'adidas', 'color' => 'red', 'size' => 47,'price' => 101],
'year' => 2023,
'new' => true,
'rating' => 3,
], ],
[ [
'id' => 's3', 'id' => 's3',
'name' => 'Кроссовки Reebok Royal Techque', 'name' => 'Кроссовки Reebok Royal Techque',
'category' => 'shoes', 'category' => 'shoes',
'properties' => ['brand' => 'rebook', 'color' => 'blue', 'size' => 47,'price' => 102] 'properties' => ['brand' => 'rebook', 'color' => 'blue', 'size' => 47,'price' => 102],
'year' => 1980,
'new' => false,
'rating' => 3,
], ],
[ [
'id' => 's4', 'id' => 's4',
'name' => 'Nike Air Zoom Pegasus 39', 'name' => 'Nike Air Zoom Pegasus 39',
'category' => 'shoes', 'category' => 'shoes',
'properties' => ['brand' => 'nike', 'color' => 'green', 'size' => 43,'price' => 103] 'properties' => ['brand' => 'nike', 'color' => 'green', 'size' => 43,'price' => 103],
'year' => 2014,
'new' => true,
'rating' => 5,
], ],
[ [
'id' => 'h1', 'id' => 'h1',
'name' => 'Nike Dri-FIT Strike', 'name' => 'Nike Dri-FIT Strike',
'category' => 't-short', 'category' => 't-short',
'properties' => ['brand' => 'nike', 'color' => 'red', 'size' => 'xl','price' => 104] 'properties' => ['brand' => 'nike', 'color' => 'red', 'size' => 'xl','price' => 104],
'year' => 2010,
'new' => true,
'rating' => 4,
], ],
[ [
'id' => 'h2', 'id' => 'h2',
'name' => 'Nike Dri-FIT Rise 365', 'name' => 'Nike Dri-FIT Rise 365',
'category' => 't-short', 'category' => 't-short',
'properties' => ['brand' => 'nike', 'color' => 'white', 'size' => 'xxl','price' => 105] 'properties' => ['brand' => 'nike', 'color' => 'white', 'size' => 'xxl','price' => 105],
'year' => 2000,
'new' => true,
'rating' => 3,
], ],
[ [
'id' => 'h3', 'id' => 'h3',
'name' => 'Компрессионная Футболка ACTIVCHILL Graphic Move', 'name' => 'Компрессионная Футболка ACTIVCHILL Graphic Move',
'category' => 't-short', 'category' => 't-short',
'properties' => ['brand' => 'rebook', 'color' => 'white', 'size' => 'xl','price' => 106] 'properties' => ['brand' => 'rebook', 'color' => 'white', 'size' => 'xl','price' => 106],
'year' => 1990,
'new' => true,
'rating' => 3,
], ],
[ [
'id' => 'p1', 'id' => 'p1',
'name' => 'Товар с ценой', 'name' => 'Товар с ценой',
'category' => 'prices', 'category' => 'prices',
'properties' => ['brand' => 'rebook', 'color' => 'white', 'size' => 'xl','price' => 107] 'properties' => ['brand' => 'rebook', 'color' => 'white', 'size' => 'xl','price' => 107],
'year' => 2015,
'new' => false,
'rating' => 3,
], ],
]); ]);
$this->indexRunner->run($provider); $this->indexRunner->run($provider);
} }
} }
\ No newline at end of file
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
namespace IQDEV\ElasticSearchTests\Service; namespace IQDEV\ElasticSearchTests\Service;
use IQDEV\ElasticSearch\SearchService;
use IQDEV\ElasticSearch\Config\BaseConfiguration as Configuration; use IQDEV\ElasticSearch\Config\BaseConfiguration as Configuration;
use IQDEV\ElasticSearch\Criteria\Query\SearchQueryHandler;
use IQDEV\ElasticSearch\SearchService;
use IQDEV\ElasticSearchTests\Factory\ClientFactory; use IQDEV\ElasticSearchTests\Factory\ClientFactory;
use IQDEV\ElasticSearch\Query\SearchQueryHandler;
class SearchClient class SearchClient
{ {
......