Skip to content

Commit 923c0a4

Browse files
committed
Add basic search term filter and use it for products
1 parent 629663d commit 923c0a4

File tree

3 files changed

+17
-37
lines changed

3 files changed

+17
-37
lines changed

dist/src/Resources/config/services.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ services:
7575

7676
# Define the taxon query filters
7777
app.search.request.query_filter.taxon_instant_search.search_term_filter:
78-
class: App\Search\Request\QueryFilter\Taxon\SearchTermFilter
78+
class: MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter\SearchTermFilter
7979
arguments:
8080
$fieldsToSearch:
8181
- 'name^5'
@@ -85,7 +85,7 @@ services:
8585
- { name: app.search.request.taxon_instant_search_filter }
8686

8787
app.search.request.query_filter.taxon_search.search_term_filter:
88-
class: App\Search\Request\QueryFilter\Taxon\SearchTermFilter
88+
class: MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter\SearchTermFilter
8989
arguments:
9090
$fieldsToSearch:
9191
- 'name^5'

src/Search/Request/QueryFilter/Product/SearchTermFilter.php

+4-30
Original file line numberDiff line numberDiff line change
@@ -18,55 +18,29 @@
1818
use Elastica\QueryBuilder;
1919
use MonsieurBiz\SyliusSearchPlugin\Repository\ProductAttributeRepositoryInterface;
2020
use MonsieurBiz\SyliusSearchPlugin\Repository\ProductOptionRepositoryInterface;
21-
use MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter\QueryFilterInterface;
21+
use MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter\SearchTermFilter as BaseSearchTermFilter;
2222
use MonsieurBiz\SyliusSearchPlugin\Search\Request\RequestConfiguration;
2323

24-
final class SearchTermFilter implements QueryFilterInterface
24+
final class SearchTermFilter extends BaseSearchTermFilter
2525
{
2626
private ProductAttributeRepositoryInterface $productAttributeRepository;
2727

2828
private ProductOptionRepositoryInterface $productOptionRepository;
2929

30-
private array $fieldsToSearch;
31-
3230
public function __construct(
3331
ProductAttributeRepositoryInterface $productAttributeRepository,
3432
ProductOptionRepositoryInterface $productOptionRepository,
3533
array $fieldsToSearch
3634
) {
35+
parent::__construct($fieldsToSearch);
3736
$this->productAttributeRepository = $productAttributeRepository;
3837
$this->productOptionRepository = $productOptionRepository;
39-
$this->fieldsToSearch = $fieldsToSearch;
4038
}
4139

42-
public function apply(BoolQuery $boolQuery, RequestConfiguration $requestConfiguration): void
40+
protected function addCustomFilters(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void
4341
{
44-
$qb = new QueryBuilder();
45-
46-
$searchCode = $qb->query()->term(['code' => $requestConfiguration->getQueryText()]);
47-
48-
$searchQuery = $qb->query()->bool();
49-
$searchQuery->addShould($searchCode);
50-
$this->addFieldsToSearchCondition($searchQuery, $requestConfiguration);
51-
5242
$this->addAttributesQueries($searchQuery, $requestConfiguration);
5343
$this->addOptionsQueries($searchQuery, $requestConfiguration);
54-
55-
$boolQuery->addMust($searchQuery);
56-
}
57-
58-
private function addFieldsToSearchCondition(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void
59-
{
60-
if (0 === \count($this->fieldsToSearch)) {
61-
return;
62-
}
63-
$qb = new QueryBuilder();
64-
$nameAndDescriptionQuery = $qb->query()->multi_match();
65-
$nameAndDescriptionQuery->setFields($this->fieldsToSearch);
66-
$nameAndDescriptionQuery->setQuery($requestConfiguration->getQueryText());
67-
$nameAndDescriptionQuery->setType(MultiMatch::TYPE_MOST_FIELDS);
68-
$nameAndDescriptionQuery->setFuzziness(MultiMatch::FUZZINESS_AUTO);
69-
$searchQuery->addShould($nameAndDescriptionQuery);
7044
}
7145

7246
private function addAttributesQueries(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void

dist/src/Search/Request/QueryFilter/Taxon/SearchTermFilter.php src/Search/Request/QueryFilter/SearchTermFilter.php

+11-5
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,16 @@
1111

1212
declare(strict_types=1);
1313

14-
namespace App\Search\Request\QueryFilter\Taxon;
14+
namespace MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter;
1515

1616
use Elastica\Query\BoolQuery;
1717
use Elastica\Query\MultiMatch;
1818
use Elastica\QueryBuilder;
19-
use MonsieurBiz\SyliusSearchPlugin\Search\Request\QueryFilter\QueryFilterInterface;
2019
use MonsieurBiz\SyliusSearchPlugin\Search\Request\RequestConfiguration;
2120

22-
final class SearchTermFilter implements QueryFilterInterface
21+
class SearchTermFilter implements QueryFilterInterface
2322
{
24-
private array $fieldsToSearch;
23+
protected array $fieldsToSearch;
2524

2625
public function __construct(
2726
array $fieldsToSearch
@@ -39,10 +38,12 @@ public function apply(BoolQuery $boolQuery, RequestConfiguration $requestConfigu
3938
$searchQuery->addShould($searchCode);
4039
$this->addFieldsToSearchCondition($searchQuery, $requestConfiguration);
4140

41+
$this->addCustomFilters($searchQuery, $requestConfiguration);
42+
4243
$boolQuery->addMust($searchQuery);
4344
}
4445

45-
private function addFieldsToSearchCondition(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void
46+
protected function addFieldsToSearchCondition(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void
4647
{
4748
if (0 === \count($this->fieldsToSearch)) {
4849
return;
@@ -55,4 +56,9 @@ private function addFieldsToSearchCondition(BoolQuery $searchQuery, RequestConfi
5556
$nameAndDescriptionQuery->setFuzziness(MultiMatch::FUZZINESS_AUTO);
5657
$searchQuery->addShould($nameAndDescriptionQuery);
5758
}
59+
60+
protected function addCustomFilters(BoolQuery $searchQuery, RequestConfiguration $requestConfiguration): void
61+
{
62+
// Used by children classes
63+
}
5864
}

0 commit comments

Comments
 (0)