You are here

protected function SearchApiElasticsearchBackend::getFilter in Elasticsearch Connector 8

Get filter by associative array.

1 call to SearchApiElasticsearchBackend::getFilter()
SearchApiElasticsearchBackend::parseFilter in src/Plugin/search_api/backend/SearchApiElasticsearchBackend.php
Recursively parse Search API filters.

File

src/Plugin/search_api/backend/SearchApiElasticsearchBackend.php, line 694
Contains the SearchApiElasticsearchBackend object.

Class

SearchApiElasticsearchBackend
Plugin annotation @SearchApiBackend( id = "elasticsearch", label = @Translation("Elasticsearch"), description = @Translation("Index items using an Elasticsearch server.") )

Namespace

Drupal\elasticsearch_connector\Plugin\search_api\backend

Code

protected function getFilter(array $filter_assoc) {

  // Handles "empty", "not empty" operators.
  if (!isset($filter_assoc['filter_value'])) {
    switch ($filter_assoc['filter_operator']) {
      case '<>':
        $filter = array(
          'exists' => array(
            'field' => $filter_assoc['field_id'],
          ),
        );
        break;
      case '=':
        $filter = array(
          'not' => array(
            'filter' => array(
              'exists' => array(
                'field' => $filter_assoc['field_id'],
              ),
            ),
          ),
        );
        break;
      default:
        throw new \Exception(t('Value is empty for :field_id! Incorrect filter criteria is using for searching!', array(
          ':field_id' => $filter_assoc['field_id'],
        )));
    }
  }
  else {
    switch ($filter_assoc['filter_operator']) {
      case '=':
        $filter = array(
          'term' => array(
            $filter_assoc['field_id'] => $filter_assoc['filter_value'],
          ),
        );
        break;
      case '<>':
        $filter = array(
          'not' => array(
            'filter' => array(
              'term' => array(
                $filter_assoc['field_id'] => $filter_assoc['filter_value'],
              ),
            ),
          ),
        );
        break;
      case '>':
        $filter = array(
          'range' => array(
            $filter_assoc['field_id'] => array(
              'from' => $filter_assoc['filter_value'],
              'to' => NULL,
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ),
          ),
        );
        break;
      case '>=':
        $filter = array(
          'range' => array(
            $filter_assoc['field_id'] => array(
              'from' => $filter_assoc['filter_value'],
              'to' => NULL,
              'include_lower' => TRUE,
              'include_upper' => FALSE,
            ),
          ),
        );
        break;
      case '<':
        $filter = array(
          'range' => array(
            $filter_assoc['field_id'] => array(
              'from' => NULL,
              'to' => $filter_assoc['filter_value'],
              'include_lower' => FALSE,
              'include_upper' => FALSE,
            ),
          ),
        );
        break;
      case '<=':
        $filter = array(
          'range' => array(
            $filter_assoc['field_id'] => array(
              'from' => NULL,
              'to' => $filter_assoc['filter_value'],
              'include_lower' => FALSE,
              'include_upper' => TRUE,
            ),
          ),
        );
        break;
      default:
        throw new \Exception(t('Undefined operator :field_operator for :field_id field! Incorrect filter criteria is using for searching!', array(
          ':field_operator' => $filter_assoc['filter_operator'],
          ':field_id' => $filter_assoc['field_id'],
        )));
    }
  }
  return $filter;
}