protected function SearchApiElasticsearchQuery::parseFilter in Search API Elasticsearch 7.2
Parse Search API filters.
Parameters
SearchApiQueryFilterInterface $query_filter:
string $field_type:
string $ignored_field:
Return value
array|null
Throws
Exception
2 calls to SearchApiElasticsearchQuery::parseFilter()
- SearchApiElasticsearchQuery::build in includes/
SearchApiElasticsearchQuery.inc - Build Elastica query for Elasticsearch.
- SearchApiElasticsearchQuery::getAggregationFilter in includes/
SearchApiElasticsearchQuery.inc - Helper method to get filters for aggregations.
File
- includes/
SearchApiElasticsearchQuery.inc, line 346
Class
Code
protected function parseFilter(SearchApiQueryFilterInterface $query_filter, $field_type = null, $ignored_field = null) {
if (empty($query_filter) || empty($field_type)) {
return null;
}
else {
$conjunction = $query_filter
->getConjunction();
$filters = [];
foreach ($query_filter
->getFilters() as $filter_info) {
$filter = null;
// Simple filter [field_id, value, operator]
if (is_array($filter_info)) {
$filter_operator = str_replace('!=', '<>', $filter_info[2]);
$filter_array = [
'field_id' => $filter_info[0],
'field_value' => $filter_info[1],
'filter_operator' => $filter_operator,
];
$this
->verifyFilterConfiguration($filter_array, $ignored_field);
// Handle parse date filters.
if ($field_type == 'date') {
$filter_array['field_value'] = date(SEARCH_API_ELASTICSEARCH_DATE_FORMAT, $filter_array['field_value']);
}
$filter = $this
->getFilter($filter_array);
if (!empty($filter)) {
$filters[] = $filter;
}
}
elseif ($filter_info instanceof SearchApiQueryFilterInterface) {
$nested_filters = $this
->parseFilter($filter_info, $field_type);
if (!empty($nested_filters)) {
$filters = array_merge($filters, $nested_filters);
}
}
}
$this
->joinFilters($filters, $conjunction);
return $filters;
}
}