You are here

protected function SearchApiElasticsearchConnector::normalizeFilters in Elasticsearch Connector 7.5

Normalizes complicated filters.

1 call to SearchApiElasticsearchConnector::normalizeFilters()
SearchApiElasticsearchConnector::parseFilter in modules/elasticsearch_connector_search_api/service.inc
Recursively parse Search API filters.

File

modules/elasticsearch_connector_search_api/service.inc, line 784
Provides a Elasticsearch-based service class for the Search API using Elasticsearch Connector module.

Class

SearchApiElasticsearchConnector
Search service class.

Code

protected function normalizeFilters($filters, $conjunction) {
  $result = array();
  if (isset($filters['filter'])) {
    $result['filter'] = $filters['filter'];
    unset($filters['filter']);
  }
  if (isset($filters['should'])) {
    $result['should'] = $filters['should'];
    unset($filters['should']);
  }
  if (isset($filters['must_not'])) {
    $result['must_not'] = $filters['must_not'];
    unset($filters['must_not']);
  }
  if (count($filters)) {
    foreach ($filters as $key => $value) {
      if (is_int($key)) {
        if (isset($value['must_not'])) {
          $result['must_not'][] = $value['must_not'];
        }
        else {
          if ($conjunction === 'AND') {
            if (!isset($result['filter'])) {
              $result['filter'] = array();
              $result['filter'] = array(
                $value,
              );
            }
            else {
              $result['filter'][] = array(
                $value,
              );
            }
          }
          else {
            if (!isset($result['should'])) {
              $result['should'] = array();
              $result['should'] = array(
                $value,
              );
            }
            else {
              $result['should'][] = array(
                $value,
              );
            }
          }
        }
      }
      else {
        $result['filter'][] = array(
          $value,
        );
      }
    }
  }
  return $result;
}