Skip to content
GitLab
Explore
Sign in
Vendor
search-es
Compare revisions
1c6e35e2973f60dfcb045142c11d3ff15ec938d5 to 45efa25e0da443944dbd396ae10efb21cb8211fc
Hide whitespace changes
Inline
Side-by-side
tests/F
I
lter/QueryTest.php
→
tests/F
i
lter/QueryTest.php
View file @
45efa25e
...
...
@@ -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
->
f
ilters
()
->
add
(
clone
$filterCollectionPrice
);
$criteriaPost
->
f
ilters
()
->
add
(
clone
$filterCollectionBrand
);
$criteriaPost
->
getF
ilters
()
->
add
(
clone
$filterCollectionPrice
);
$criteriaPost
->
getF
ilters
()
->
add
(
clone
$filterCollectionBrand
);
// Формирование фильтра для query
$criteriaQuery
=
clone
$criteria
;
$filterTypeQuery
=
FilterType
::
query
()
;
$filterTypeQuery
=
FilterType
::
QUERY
;
$filterCollectionPrice
->
setFilterType
(
$filterTypeQuery
);
$filterCollectionBrand
->
setFilterType
(
$filterTypeQuery
);
$criteriaQuery
->
f
ilters
()
->
add
(
clone
$filterCollectionPrice
);
$criteriaQuery
->
f
ilters
()
->
add
(
clone
$filterCollectionBrand
);
$criteriaQuery
->
getF
ilters
()
->
add
(
clone
$filterCollectionPrice
);
$criteriaQuery
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
$filterCollectionPrice
);
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
$filterCollectionQueryPrice
);
$filterCollectionQueryPrice
->
setFilterType
(
FilterType
::
QUERY
);
$criteria
->
getF
ilters
()
->
add
(
$filterCollectionQueryPrice
);
$criteriaTo
Es
Request
=
new
CriteriaTo
Es
Request
();
$request
=
$criteriaTo
Es
Request
->
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
->
f
ilters
()
->
add
(
$filterCollectionPrice
);
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
$filterCollectionQueryPrice
);
$filterCollectionQueryPrice
->
setFilterType
(
FilterType
::
QUERY
);
$criteria
->
getF
ilters
()
->
add
(
$filterCollectionQueryPrice
);
$q
=
new
SearchQuery
(
$criteria
);
...
...
tests/F
I
lter/RangeTest.php
→
tests/F
i
lter/RangeTest.php
View file @
45efa25e
...
...
@@ -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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
->
f
ilters
()
->
add
(
new
FilterGroupCollection
([
$criteria
->
getF
ilters
()
->
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
)
),
]));
...
...
tests/F
I
lter/SearchItemsTest.php
→
tests/F
i
lter/SearchItemsTest.php
View file @
45efa25e
...
...
@@ -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
}
tests/F
I
lter/SortTest.php
→
tests/F
i
lter/SortTest.php
View file @
45efa25e
...
...
@@ -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
);
...
...
tests/Filter/UpdatedSearchTest.php
0 → 100644
View file @
45efa25e
<?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
));
}
}
tests/Helpers/FormatData.php
View file @
45efa25e
...
...
@@ -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 Facet
Result
$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'
=>
[]
...
...
tests/Helpers/TestIndexProvider.php
View file @
45efa25e
...
...
@@ -4,9 +4,9 @@ namespace IQDEV\ElasticSearchTests\Helpers;
use
IQDEV\ElasticSearch\Configuration
;
use
IQDEV\ElasticSearch\Document\ProductDocument
;
use
IQDEV\ElasticSearch\
Facet\FacetCategor
y
;
use
IQDEV\ElasticSearch\
Facet\FacetKeyword
;
use
IQDEV\ElasticSearch\Facet\Facet
Number
;
use
IQDEV\ElasticSearch\
Document\Property\Propert
y
;
use
IQDEV\ElasticSearch\
Document\Property\PropertyType
;
use
IQDEV\ElasticSearch\Facet\Facet
Factory
;
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,11 +48,15 @@ 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
)
);
}
}
}
...
...
tests/Seed/DefaultSeed.php
View file @
45efa25e
...
...
@@ -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\Test
Logger
;
use
Psr\Log\
Null
Logger
;
class
DefaultSeed
{
...
...
@@ -22,7 +22,7 @@ class DefaultSeed
$this
->
indexRunner
=
new
IndexRunner
(
ClientFactory
::
create
(),
$this
->
configuration
,
new
Test
Logger
()
new
Null
Logger
()
);
}
...
...
@@ -33,49 +33,57 @@ 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
,
],
[
'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
,
],
[
'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
,
],
[
'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
,
],
[
'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
,
],
[
'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
,
],
[
'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
,
],
[
'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
,
],
]);
...
...
tests/Service/SearchClient.php
View file @
45efa25e
...
...
@@ -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
{
...
...
Prev
1
2
3
4
5
6
Next