protected function SearchApiElasticsearchConnector::getSortSearchQuery in Elasticsearch Connector 7.5
Same name and namespace in other branches
- 7 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::getSortSearchQuery()
- 7.2 modules/elasticsearch_connector_search_api/service.inc \SearchApiElasticsearchConnector::getSortSearchQuery()
Helper function that return Sort for query in search.
1 call to SearchApiElasticsearchConnector::getSortSearchQuery()
- 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 1739 - Provides a Elasticsearch-based service class for the Search API using Elasticsearch Connector module.
Class
- SearchApiElasticsearchConnector
- Search service class.
Code
protected function getSortSearchQuery(SearchApiQueryInterface $query) {
$index_fields = $this
->getIndexFields($query);
$index = $query
->getIndex();
$sort = array();
// Extract Search API Location fields.
$search_api_location = $query
->getOption('search_api_location');
$spatials = array();
if ($search_api_location) {
foreach ($search_api_location as $spatial) {
$spatials[$spatial['field']] = $spatial;
}
}
$query_full_text_fields = $index
->getFulltextFields(TRUE);
foreach ($query
->getSort() as $field_id => $direction) {
$direction = drupal_strtolower($direction);
if ($field_id === 'search_api_relevance') {
$sort['_score'] = $direction;
}
elseif (isset($index_fields[$field_id])) {
// Check whether the field is a location field.
if (isset($index_fields[$field_id]['real_type']) && $index_fields[$field_id]['real_type'] == 'location') {
// Only set proximity sort if the point is set.
if (isset($spatials[$field_id])) {
$sort['_geo_distance'] = array(
$field_id => array(
'lat' => $spatials[$field_id]['lat'],
'lon' => $spatials[$field_id]['lon'],
),
'order' => $direction,
'unit' => 'km',
'distance_type' => 'plane',
);
}
}
else {
if (in_array($field_id, $query_full_text_fields)) {
$sort[$field_id . '.keyword'] = $direction;
}
else {
$sort[$field_id] = $direction;
}
}
}
else {
throw new Exception(t('Incorrect sorting!.'));
}
}
return $sort;
}