diff --git a/src/Model/DefaultSearch/Query/BoolExistsQuery.php b/src/Model/DefaultSearch/Query/BoolExistsQuery.php new file mode 100644 index 00000000..54dce7cb --- /dev/null +++ b/src/Model/DefaultSearch/Query/BoolExistsQuery.php @@ -0,0 +1,49 @@ +value => [ + 'bool' => [ + 'must_not' => [ + 'exists' => ['field' => $field], + ], + ], + ], + ]); + } + + public function getField(): string + { + return $this->field; + } + + public function toArrayAsSubQuery(): array + { + return [ + 'bool' => [ + 'must_not' => [ + 'exists' => ['field' => $this->field], + ], + ], + ]; + } +} diff --git a/src/Model/Search/Modifier/Filter/Basic/BooleanFilter.php b/src/Model/Search/Modifier/Filter/Basic/BooleanFilter.php index 4eca925c..57b6c5bd 100644 --- a/src/Model/Search/Modifier/Filter/Basic/BooleanFilter.php +++ b/src/Model/Search/Modifier/Filter/Basic/BooleanFilter.php @@ -19,7 +19,7 @@ { public function __construct( private string $fieldName, - private bool $searchTerm, + private null|bool $searchTerm, private bool $enablePqlFieldNameResolution = true, ) { } @@ -29,7 +29,7 @@ public function getFieldName(): string return $this->fieldName; } - public function getSearchTerm(): bool + public function getSearchTerm(): null|bool { return $this->searchTerm; } diff --git a/src/SearchIndexAdapter/DefaultSearch/Search/Modifier/Filter/BasicFilters.php b/src/SearchIndexAdapter/DefaultSearch/Search/Modifier/Filter/BasicFilters.php index 5c706a77..d25ca0e5 100644 --- a/src/SearchIndexAdapter/DefaultSearch/Search/Modifier/Filter/BasicFilters.php +++ b/src/SearchIndexAdapter/DefaultSearch/Search/Modifier/Filter/BasicFilters.php @@ -16,6 +16,7 @@ use Pimcore\Bundle\GenericDataIndexBundle\Attribute\Search\AsSearchModifierHandler; use Pimcore\Bundle\GenericDataIndexBundle\Enum\SearchIndex\FieldCategory\SystemField; use Pimcore\Bundle\GenericDataIndexBundle\Model\DefaultSearch\Modifier\SearchModifierContextInterface; +use Pimcore\Bundle\GenericDataIndexBundle\Model\DefaultSearch\Query\BoolExistsQuery; use Pimcore\Bundle\GenericDataIndexBundle\Model\DefaultSearch\Query\BoolQuery; use Pimcore\Bundle\GenericDataIndexBundle\Model\DefaultSearch\Query\TermFilter; use Pimcore\Bundle\GenericDataIndexBundle\Model\DefaultSearch\Query\TermsFilter; @@ -77,11 +78,19 @@ public function handleBooleanFilter(BooleanFilter $booleanFilter, SearchModifier ); } - $context->getSearch()->addQuery( - new TermFilter( + $query = new BoolExistsQuery( + field: $fieldName, + ); + + if ($booleanFilter->getSearchTerm() !== null) { + $query = new TermFilter( field: $fieldName, term: $booleanFilter->getSearchTerm(), - ) + ); + } + + $context->getSearch()->addQuery( + $query ); }