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 1167 additions and 491 deletions
<?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,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()
);
}
......@@ -69,7 +69,7 @@ class IndexesTest extends AbstractTestCase
]
]);
$esResponseToResult = new EsResponseToResult();
$result = $esResponseToResult->fromResponse($response);
$result = $esResponseToResult->fromResponse($response, $this->configuration);
unset($updateData['type']);
$expected = [
......@@ -80,4 +80,4 @@ class IndexesTest extends AbstractTestCase
$this->assertEqualsCanonicalizing($expected, FormatData::formatDataProducts($result));
}
}
\ No newline at end of file
}
......@@ -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);
......
......@@ -2,19 +2,22 @@
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Converter\CriteriaToEsRequest;
use IQDEV\ElasticSearch\Config\BaseConfiguration;
use IQDEV\ElasticSearch\Converter\Request\CriteriaToRequest;
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\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\Query\SearchQuery;
/**
* Тестирование агрегирующих функций
......@@ -23,11 +26,14 @@ class QueryTest extends AbstractTestCase
{
public function testFilterChangeFromPostToQuery()
{
$filter = [
$search = [
'category' => [
'key' => 'category_id',
'value' => 'shoes',
],
];
$filter = [
'brand' => [
'key' => 'brand',
'value' => 'nike',
......@@ -40,22 +46,21 @@ class QueryTest extends AbstractTestCase
];
$criteria = new Criteria();
$criteria->getSearch()->add(
new Search(
new Property($search['category']['key']),
$search['category']['value'],
),
);
$filterCollectionCategory = new FilterGroupCollection([
new Filter(
new Field($filter['category']['key']),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword($filter['category']['value'])
)
]);
$filterCollectionCategory->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionCategory);
$filterCollectionCategory = new FilterGroupCollection();
$filterCollectionCategory->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionCategory);
$filterCollectionBrand = new FilterGroupCollection([
new Filter(
new Field($filter['brand']['key']),
new FilterOperator(FilterOperator::EQ),
FilterOperator::EQ,
new FilterKeyword($filter['brand']['value'])
)
]);
......@@ -63,37 +68,36 @@ class QueryTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber($filter['price']['min'])
),
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber($filter['price']['max'])
),
]);
// Формирование фильтра для post
$criteriaPost = clone $criteria;
$criteriaPost->filters()->add(clone $filterCollectionPrice);
$criteriaPost->filters()->add(clone $filterCollectionBrand);
$criteriaPost->getFilters()->add(clone $filterCollectionPrice);
$criteriaPost->getFilters()->add(clone $filterCollectionBrand);
// Формирование фильтра для query
$criteriaQuery = clone $criteria;
$filterTypeQuery = FilterType::query();
$filterTypeQuery = FilterType::QUERY;
$filterCollectionPrice->setFilterType($filterTypeQuery);
$filterCollectionBrand->setFilterType($filterTypeQuery);
$criteriaQuery->filters()->add(clone $filterCollectionPrice);
$criteriaQuery->filters()->add(clone $filterCollectionBrand);
$criteriaQuery->getFilters()->add(clone $filterCollectionPrice);
$criteriaQuery->getFilters()->add(clone $filterCollectionBrand);
// Получение классов с данными для запроса в es
$criteriaToEsRequest = new CriteriaToEsRequest();
$requestPost = $criteriaToEsRequest->fromCriteria($criteriaPost);
$requestQuery = $criteriaToEsRequest->fromCriteria($criteriaQuery);
$criteriaToRequest = new CriteriaToRequest(new BaseConfiguration());
$requestPost = $criteriaToRequest->fromCriteria($criteriaPost);
$requestQuery = $criteriaToRequest->fromCriteria($criteriaQuery);
$expectedFilter = [
[
......@@ -104,18 +108,21 @@ class QueryTest extends AbstractTestCase
"filter" => [
[
"nested" => [
"path" => "search_data.keyword_facet",
"path" => "search_data.number_facet",
"query" => [
"bool" => [
"filter" => [
[
"term" => [
"search_data.keyword_facet.facet_code" => $filter['brand']['key']
"search_data.number_facet.facet_code" => $filter['price']['key']
]
],
[
"term" => [
"search_data.keyword_facet.facet_value" => $filter['brand']['value']
"range" => [
"search_data.number_facet.facet_value" => [
"lt" => $filter['price']['min'],
"gt" => $filter['price']['max'],
]
]
]
]
......@@ -136,21 +143,18 @@ class QueryTest extends AbstractTestCase
"filter" => [
[
"nested" => [
"path" => "search_data.number_facet",
"path" => "search_data.keyword_facet",
"query" => [
"bool" => [
"filter" => [
[
"term" => [
"search_data.number_facet.facet_code" => $filter['price']['key']
"search_data.keyword_facet.facet_code" => $filter['brand']['key']
]
],
[
"range" => [
"search_data.number_facet.facet_value" => [
"lt" => $filter['price']['min'],
"gt" => $filter['price']['max'],
]
"term" => [
"search_data.keyword_facet.facet_value" => $filter['brand']['value']
]
]
]
......@@ -162,7 +166,7 @@ class QueryTest extends AbstractTestCase
]
]
]
]
],
];
$expected = [
"query" => [
......@@ -170,7 +174,7 @@ class QueryTest extends AbstractTestCase
"must" => [
[
"term" => [
"category_id" => $filter['category']['value']
"category_id" => $search['category']['value']
]
],
]
......@@ -178,7 +182,6 @@ class QueryTest extends AbstractTestCase
],
];
$this->assertArray(
array_merge($expected, [
"query" => [
......@@ -222,31 +225,31 @@ class QueryTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber($filter['price']['min'])
),
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber($filter['price']['max'])
),
]);
$criteria->filters()->add($filterCollectionPrice);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionQueryPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber($filter['price']['lower'])
),
]);
$filterCollectionQueryPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionQueryPrice);
$filterCollectionQueryPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionQueryPrice);
$criteriaToEsRequest = new CriteriaToEsRequest();
$request = $criteriaToEsRequest->fromCriteria($criteria);
$criteriaToRequest = new CriteriaToRequest(new BaseConfiguration());
$request = $criteriaToRequest->fromCriteria($criteria);
$expected = [
......@@ -352,22 +355,22 @@ class QueryTest extends AbstractTestCase
$filterCollectionPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber($filter['price']['min'])
)
]);
$criteria->filters()->add($filterCollectionPrice);
$criteria->getFilters()->add($filterCollectionPrice);
$filterCollectionQueryPrice = new FilterGroupCollection([
new Filter(
new Field($filter['price']['key']),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber($filter['price']['lower'])
),
]);
$filterCollectionQueryPrice->setFilterType(FilterType::query());
$criteria->filters()->add($filterCollectionQueryPrice);
$filterCollectionQueryPrice->setFilterType(FilterType::QUERY);
$criteria->getFilters()->add($filterCollectionQueryPrice);
$q = new SearchQuery($criteria);
......@@ -487,4 +490,147 @@ class QueryTest extends AbstractTestCase
$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,16 +2,16 @@
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\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\FilterNumber;
use IQDEV\Search\Filter\FilterOperator;
use IQDEV\Search\Query\SearchQuery;
class RangeTest extends AbstractTestCase
{
......@@ -24,10 +24,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(103)
),
]));
......@@ -60,10 +60,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber(103.01)
),
]));
......@@ -95,10 +95,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GT),
FilterOperator::GT,
new FilterNumber(102.99)
),
]));
......@@ -131,10 +131,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(102)
),
]));
......@@ -165,10 +165,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber(102.99)
),
]));
......@@ -199,10 +199,10 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LT),
FilterOperator::LT,
new FilterNumber(101.99)
),
]));
......@@ -232,15 +232,15 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$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(102)
),
]));
......@@ -270,15 +270,15 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(101.01)
),
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(102)
),
]));
......@@ -307,15 +307,15 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$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(101.99)
),
]));
......@@ -344,15 +344,15 @@ class RangeTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(new FilterGroupCollection([
$criteria->getFilters()->add(new FilterGroupCollection([
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::GTE),
FilterOperator::GTE,
new FilterNumber(101.99)
),
new Filter(
new Field('price'),
new FilterOperator(FilterOperator::LTE),
FilterOperator::LTE,
new FilterNumber(101.99)
),
]));
......
......@@ -2,17 +2,14 @@
namespace IQDEV\ElasticSearchTests\Filter;
use IQDEV\ElasticSearch\Criteria\Criteria;
use IQDEV\ElasticSearch\Criteria\Query\SearchQuery;
use IQDEV\ElasticSearch\Criteria\Search\Search;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearch\Document\Property\PropertyType;
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 SearchItemsTest extends AbstractTestCase
{
......@@ -24,16 +21,11 @@ class SearchItemsTest extends AbstractTestCase
public function testExistByCategory(): void
{
$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'
)
);
$q = new SearchQuery($criteria);
......@@ -60,15 +52,11 @@ class SearchItemsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('category_id'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('category_id'),
'',
)
);
$q = new SearchQuery($criteria);
......@@ -124,15 +112,11 @@ class SearchItemsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('search'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('Nike')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('full_search_content', PropertyType::TEXT),
'Nike'
)
);
$q = new SearchQuery($criteria);
......@@ -161,15 +145,11 @@ class SearchItemsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('search'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('Nike Dri-FIT Strike')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('full_search_content', PropertyType::TEXT),
'Nike Dri-FIT Strike',
),
);
$q = new SearchQuery($criteria);
......@@ -198,15 +178,11 @@ class SearchItemsTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->filters()->add(
(new FilterGroupCollection([
new Filter(
new Field('search'),
new FilterOperator(FilterOperator::EQ),
new FilterKeyword('Товар с ценой')
)
]))
->setFilterType(FilterType::query())
$criteria->getSearch()->add(
new Search(
new Property('full_search_content', PropertyType::TEXT),
'Товар с ценой',
),
);
$q = new SearchQuery($criteria);
......@@ -214,7 +190,6 @@ class SearchItemsTest extends AbstractTestCase
$handler = SearchClient::getInstance();
$result = $handler->handle($q)->result;
$expected = [
'hits' => [
'p1',
......@@ -223,4 +198,4 @@ class SearchItemsTest extends AbstractTestCase
$this->assertEqualsCanonicalizing($expected, FormatData::formatData($result));
}
}
\ No newline at end of file
}
......@@ -2,16 +2,15 @@
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\PropertyType;
use IQDEV\ElasticSearchTests\AbstractTestCase;
use IQDEV\ElasticSearchTests\Helpers\FormatData;
use IQDEV\ElasticSearchTests\Service\SearchClient;
use IQDEV\Search\Criteria;
use IQDEV\Search\Document\Property\AttrType;
use IQDEV\Search\Document\Property\PropertyType;
use IQDEV\Search\Order\Order;
use IQDEV\Search\Order\OrderAscType;
use IQDEV\Search\Order\OrderDescType;
use IQDEV\Search\Query\SearchQuery;
class SortTest extends AbstractTestCase
{
......@@ -24,10 +23,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new AttrType('category_id'),
new OrderAscType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('category_id'), OrderDirection::ASC)
);
$q = new SearchQuery($criteria);
......@@ -60,10 +58,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new AttrType('category_id'),
new OrderDescType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('category_id'), OrderDirection::DESC)
);
$q = new SearchQuery($criteria);
......@@ -96,10 +93,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('color', PropertyType::TYPE_KEYWORD),
new OrderAscType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::ASC)
);
$q = new SearchQuery($criteria);
......@@ -132,10 +128,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('color', PropertyType::TYPE_KEYWORD),
new OrderDescType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('color', PropertyType::KEYWORD), OrderDirection::DESC)
);
$q = new SearchQuery($criteria);
......@@ -168,10 +163,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('price', PropertyType::TYPE_NUMBER),
new OrderAscType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::ASC)
);
$q = new SearchQuery($criteria);
......@@ -204,10 +198,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('price', PropertyType::TYPE_NUMBER),
new OrderDescType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('price', PropertyType::NUMBER), OrderDirection::DESC)
);
$q = new SearchQuery($criteria);
......@@ -240,10 +233,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('size', PropertyType::TYPE_KEYWORD),
new OrderAscType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::ASC)
);
$q = new SearchQuery($criteria);
......@@ -276,10 +268,9 @@ class SortTest extends AbstractTestCase
{
$criteria = new Criteria();
$criteria->sorting()->add(new Order(
new PropertyType('size', PropertyType::TYPE_KEYWORD),
new OrderDescType(),
));
$criteria->getSorting()->add(
OrderFactory::createByProperty(new Property('size', PropertyType::KEYWORD), OrderDirection::DESC)
);
$q = new SearchQuery($criteria);
......
<?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));
}
}
......@@ -2,13 +2,11 @@
namespace IQDEV\ElasticSearchTests\Helpers;
use IQDEV\Search\Document\Product;
use IQDEV\Search\Facet\Facet;
use IQDEV\Search\Facet\Item\FacetItemList;
use IQDEV\Search\Facet\Item\FacetItemRange;
use IQDEV\Search\Facet\Type\FacetListType;
use IQDEV\Search\Facet\Type\FacetRangeType;
use IQDEV\Search\Result;
use IQDEV\ElasticSearch\Document\Product;
use IQDEV\ElasticSearch\Facet\FacetResult;
use IQDEV\ElasticSearch\Facet\Item\FacetItemList;
use IQDEV\ElasticSearch\Facet\Item\FacetItemRange;
use IQDEV\ElasticSearch\Result;
class FormatData
{
......@@ -28,11 +26,11 @@ class FormatData
$aResult = ['facets' => []];
$aResult['hits'] = static::formatData($result)['hits'];
foreach ($result->getFacets() as $facet) {
/** @var Facet $facet */
/** @var FacetResult $facet */
$dataFacet = [
'code' => $facet->getCode(),
'label' => null, // $facet->getLabel(),
'type' => $facet->getType() instanceof FacetRangeType ? 'range' : ($facet->getType() instanceof FacetListType ? 'list' : null),
'type' => $facet->getType()->value,
'items' => [
'list' => [],
'range' => []
......
......@@ -4,9 +4,9 @@ namespace IQDEV\ElasticSearchTests\Helpers;
use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Document\ProductDocument;
use IQDEV\ElasticSearch\Facet\FacetCategory;
use IQDEV\ElasticSearch\Facet\FacetKeyword;
use IQDEV\ElasticSearch\Facet\FacetNumber;
use IQDEV\ElasticSearch\Document\Property\Property;
use IQDEV\ElasticSearch\Document\Property\PropertyType;
use IQDEV\ElasticSearch\Facet\FacetFactory;
use IQDEV\ElasticSearch\Indexer\AddIndex;
use IQDEV\ElasticSearch\Indexer\DeleteIndex;
use IQDEV\ElasticSearch\Indexer\IndexProvider;
......@@ -30,7 +30,9 @@ class TestIndexProvider implements IndexProvider
public function get(): \Generator
{
foreach ($this->products as $product) {
$document = new ProductDocument(new FacetCategory($product['category']));
$document = new ProductDocument(
FacetFactory::createFromProperty(new Property('category_id', PropertyType::BASE), $product['category'])
);
//todo по-хорошему нужны базовые классы, которые будут описывать свойства
// и формировать структуру для последующей обработки
......@@ -46,15 +48,22 @@ class TestIndexProvider implements IndexProvider
$document->setAdditionData($data);
if (isset($product['properties'])) {
foreach ($product['properties'] as $key => $prop) {
foreach ($product['properties'] as $key => $value) {
if ($key === 'price') {
$document->getNumberFacets()->add(new FacetNumber($key, $prop));
$document->getNumberFacets()->add(
FacetFactory::createFromProperty(new Property($key, PropertyType::NUMBER), $value)
);
} else {
$document->getKeywordFacets()->add(new FacetKeyword($key, $prop));
$document->getKeywordFacets()->add(
FacetFactory::createFromProperty(new Property($key, PropertyType::KEYWORD), $value)
);
}
}
}
$document->setByConfiguration($this->configuration, 'new', $product['new']);
$document->setByConfiguration($this->configuration, 'rating', $product['rating']);
$product['type'] = $product['type'] ?? null;
switch ($product['type']) {
case 'update':
......@@ -113,4 +122,4 @@ class TestIndexProvider implements IndexProvider
{
return null;
}
}
\ No newline at end of file
}
......@@ -7,7 +7,7 @@ use IQDEV\ElasticSearch\Configuration;
use IQDEV\ElasticSearch\Indexer\IndexRunner;
use IQDEV\ElasticSearchTests\Factory\ClientFactory;
use IQDEV\ElasticSearchTests\Helpers\TestIndexProvider;
use Psr\Log\Test\TestLogger;
use Psr\Log\NullLogger;
class DefaultSeed
{
......@@ -22,7 +22,7 @@ class DefaultSeed
$this->indexRunner = new IndexRunner(
ClientFactory::create(),
$this->configuration,
new TestLogger()
new NullLogger()
);
}
......@@ -33,52 +33,76 @@ class DefaultSeed
'id' => 's1',
'name' => 'Кроссовки NMD_R1 Boba Fett Spectoo',
'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',
'name' => 'КРОССОВКИ ULTRABOOST 5.0 DNA',
'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',
'name' => 'Кроссовки Reebok Royal Techque',
'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',
'name' => 'Nike Air Zoom Pegasus 39',
'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',
'name' => 'Nike Dri-FIT Strike',
'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',
'name' => 'Nike Dri-FIT Rise 365',
'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',
'name' => 'Компрессионная Футболка ACTIVCHILL Graphic Move',
'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',
'name' => 'Товар с ценой',
'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);
}
}
\ No newline at end of file
}
......@@ -2,10 +2,10 @@
namespace IQDEV\ElasticSearchTests\Service;
use IQDEV\ElasticSearch\SearchService;
use IQDEV\ElasticSearch\Config\BaseConfiguration as Configuration;
use IQDEV\ElasticSearch\Criteria\Query\SearchQueryHandler;
use IQDEV\ElasticSearch\SearchService;
use IQDEV\ElasticSearchTests\Factory\ClientFactory;
use IQDEV\Search\Query\SearchQueryHandler;
class SearchClient
{
......