protected function SearchApiElasticsearchConnector::parseFilter in Elasticsearch Connector 7
Same name and namespace in other branches
- 7.5 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::parseFilter()
- 7.2 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::parseFilter()
Recursively parse Search API filters.
2 calls to SearchApiElasticsearchConnector::parseFilter()
- SearchApiElasticsearchConnector::getFacetSearchFilter in modules/
elasticsearch_connector_search_api/ service.inc - Helper function return Facet filter.
- SearchApiElasticsearchConnector::getSearchQueryOptions in modules/
elasticsearch_connector_search_api/ service.inc - Helper function return associative array with query options.
File
- modules/
elasticsearch_connector_search_api/ service.inc, line 670 - Provides a Elasticsearch-based service class for the Search API using Elasticsearch Connector module.
Class
- SearchApiElasticsearchConnector
- Search service class.
Code
protected function parseFilter(SearchApiQueryFilterInterface $query_filter, $index_fields, $ignored_field_id = '') {
if (empty($query_filter)) {
return NULL;
}
else {
$conjunction = $query_filter
->getConjunction();
$filters = array();
$queries = array();
try {
foreach ($query_filter
->getFilters() as $filter_info) {
$filter = NULL;
$filter_type = NULL;
// Simple filter [field_id, value, operator].
if (is_array($filter_info)) {
$filter_assoc = $this
->getAssociativeFilter($filter_info);
$this
->correctFilter($filter_assoc, $index_fields, $ignored_field_id);
// Check if we need to ignore the filter!
if ($filter_assoc['field_id'] != $ignored_field_id) {
list($filter_type, $filter) = $this
->getFilter($filter_assoc, $index_fields);
}
if (!empty($filter)) {
if ($filter_type == self::FILTER_TYPE) {
$filters[] = $filter;
}
elseif ($filter_type == self::QUERY_TYPE) {
$queries[] = $filter;
}
}
}
elseif ($filter_info instanceof SearchApiQueryFilterInterface) {
list($nested_queries, $nested_filters) = $this
->parseFilter($filter_info, $index_fields, $ignored_field_id);
// TODO: handle error. - here is unnecessary cause in if we thow exceptions and this is still in try{} .
if (!empty($nested_filters)) {
$filters = array_merge($filters, $nested_filters);
}
if (!empty($nested_queries)) {
$queries = array_merge($queries, $nested_queries);
}
}
}
if (!empty($queries)) {
$queries = $this
->normalizeFulltextQuery($queries, $conjunction);
}
if (!empty($filters)) {
$filters = $this
->setFiltersConjunction($filters, $conjunction);
}
} catch (Exception $e) {
watchdog('Elasticsearch Search API', check_plain($e
->getMessage()), array(), WATCHDOG_ERROR);
drupal_set_message(check_plain($e
->getMessage()), 'error');
}
return array(
$queries,
$filters,
);
}
}