You are here

public static function FilterFactory::filterFromCondition in Elasticsearch Connector 8.7

Same name and namespace in other branches
  1. 8.2 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()
  2. 8.5 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()
  3. 8.6 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()

Get query by Condition instance.

Parameters

Condition $condition:

Return value

array

Throws

\Exception

3 calls to FilterFactory::filterFromCondition()
FilterFactoryTest::testFilterFromConditionA in tests/src/Unit/ElasticSearch/Parameters/Factory/FilterFactoryTest.php
@covers ::filterFromCondition
FilterFactoryTest::testFilterFromConditionB in tests/src/Unit/ElasticSearch/Parameters/Factory/FilterFactoryTest.php
@covers ::filterFromCondition
SearchBuilder::getQueryFilters in src/ElasticSearch/Parameters/Builder/SearchBuilder.php
Recursively parse Search API condition group.

File

src/ElasticSearch/Parameters/Factory/FilterFactory.php, line 21

Class

FilterFactory
Class FilterFactory.

Namespace

Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory

Code

public static function filterFromCondition(Condition $condition) {

  // Handles "empty", "not empty" operators.
  if (is_null($condition
    ->getValue())) {
    switch ($condition
      ->getOperator()) {
      case '<>':
        $filter = [
          'exists' => [
            'field' => $condition
              ->getField(),
          ],
        ];
        break;
      case '=':
        $filter = [
          'bool' => [
            'must_not' => [
              'exists' => [
                'field' => $condition
                  ->getField(),
              ],
            ],
          ],
        ];
        break;
      default:
        throw new \Exception('Value is empty for ' . $condition
          ->getField() . '. Incorrect filter criteria is using for searching!');
    }
  }
  else {
    switch ($condition
      ->getOperator()) {
      case '=':
        $filter = [
          'term' => [
            $condition
              ->getField() => $condition
              ->getValue(),
          ],
        ];
        break;
      case 'IN':
        $filter = [
          'terms' => [
            $condition
              ->getField() => array_values($condition
              ->getValue()),
          ],
        ];
        break;
      case 'NOT IN':
        $filter = [
          'bool' => [
            'must_not' => [
              'terms' => [
                $condition
                  ->getField() => array_values($condition
                  ->getValue()),
              ],
            ],
          ],
        ];
        break;
      case '<>':
        $filter = [
          'bool' => [
            'must_not' => [
              'term' => [
                $condition
                  ->getField() => $condition
                  ->getValue(),
              ],
            ],
          ],
        ];
        break;
      case '>':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => $condition
                ->getValue(),
              'to' => NULL,
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '>=':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => $condition
                ->getValue(),
              'to' => NULL,
              'include_lower' => TRUE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '<':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => NULL,
              'to' => $condition
                ->getValue(),
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case '<=':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => NULL,
              'to' => $condition
                ->getValue(),
              'include_lower' => FALSE,
              'include_upper' => TRUE,
            ],
          ],
        ];
        break;
      case 'BETWEEN':
        $filter = [
          'range' => [
            $condition
              ->getField() => [
              'from' => !empty($condition
                ->getValue()[0]) ? $condition
                ->getValue()[0] : NULL,
              'to' => !empty($condition
                ->getValue()[1]) ? $condition
                ->getValue()[1] : NULL,
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ],
          ],
        ];
        break;
      case 'NOT BETWEEN':
        $filter = [
          'bool' => [
            'must_not' => [
              'range' => [
                $condition
                  ->getField() => [
                  'from' => !empty($condition
                    ->getValue()[0]) ? $condition
                    ->getValue()[0] : NULL,
                  'to' => !empty($condition
                    ->getValue()[1]) ? $condition
                    ->getValue()[1] : NULL,
                  'include_lower' => FALSE,
                  'include_upper' => FALSE,
                ],
              ],
            ],
          ],
        ];
        break;
      default:
        throw new \Exception('Undefined operator ' . $condition
          ->getOperator() . ' for ' . $condition
          ->getField() . ' field! Incorrect filter criteria is using for searching!');
    }
  }
  return $filter;
}