protected function SearchApiElasticsearchConnector::getFilter in Elasticsearch Connector 7.5
Same name and namespace in other branches
- 7 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::getFilter()
- 7.2 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::getFilter()
Get filter by associative array.
1 call to SearchApiElasticsearchConnector::getFilter()
- SearchApiElasticsearchConnector::parseFilter in modules/
elasticsearch_connector_search_api/ service.inc - Recursively parse Search API filters.
File
- modules/
elasticsearch_connector_search_api/ service.inc, line 856 - Provides a Elasticsearch-based service class for the Search API using Elasticsearch Connector module.
Class
- SearchApiElasticsearchConnector
- Search service class.
Code
protected function getFilter(array $filter_assoc, $index_fields) {
$field_type = $index_fields[$filter_assoc['field_id']]['type'];
$type = self::FILTER_TYPE;
// 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(
'bool' => array(
'must_not' => 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'],
)));
}
}
elseif (!search_api_is_text_type($field_type)) {
switch ($filter_assoc['filter_operator']) {
case '=':
$filter = array(
'term' => array(
$filter_assoc['field_id'] => $filter_assoc['filter_value'],
),
);
break;
case '<>':
$filter = array(
'must_not' => 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;
case '*':
$type = self::QUERY_TYPE;
$filter = array(
'wildcard' => array(
$filter_assoc['field_id'] => $filter_assoc['filter_value'],
),
);
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'],
)));
break;
}
}
else {
// Handle the freetext search filters when the $query->condition(...) has been used with a fulltext field.
$type = self::QUERY_TYPE;
switch ($filter_assoc['filter_operator']) {
case '=':
$filter = array(
'match' => array(
$filter_assoc['field_id'] => array(
'query' => $filter_assoc['filter_value'],
'operator' => 'and',
),
),
);
break;
case '*':
$filter = array(
'wildcard' => array(
$filter_assoc['field_id'] => $filter_assoc['filter_value'],
),
);
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'],
)));
break;
}
}
return array(
$type,
$filter,
);
}