protected function translateFilters(CriteriaList $filter_criteria_list) { $elasticsearch_filters = []; foreach ($filter_criteria_list as $criteria) { if ($criteria instanceof CriteriaContainerInterface) { $operator = $criteria->getOperator(); $filters = $this->translateFilters($criteria->getCriteriaList()); if (!empty($filters)) { if (isset($elasticsearch_filters[$operator])) { $elasticsearch_filters[] = array_merge_recursive($elasticsearch_filters[$operator], $filters); } else { $elasticsearch_filters[] = $filters; } } } elseif ($criteria instanceof AttributeCriteria) { $elasticsearch_filters[] = $this->buildFilterFor($criteria); } elseif ($criteria instanceof RangeCriteria) { $elasticsearch_filters[] = $this->buildRangeFilterFor($criteria); } elseif ($criteria instanceof SpatialCriteria) { $elasticsearch_filters[] = $this->buildSpatialFilterFor($criteria); } elseif ($criteria instanceof CustomCriteria) { $elasticsearch_filters[] = $criteria->getQueryPart(); } else { throw new RuntimeError(sprintf('Invalid criteria type %s given to %s', get_class($criteria), static::CLASS)); } } if (count($elasticsearch_filters)) { return [$filter_criteria_list->getOperator() => $elasticsearch_filters]; } else { return []; } }