You are here

protected function SearchApiSolrBackend::createLocationFilterQuery in Search API Solr 8

Same name and namespace in other branches
  1. 8.3 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::createLocationFilterQuery()
  2. 8.2 src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::createLocationFilterQuery()
  3. 4.x src/Plugin/search_api/backend/SearchApiSolrBackend.php \Drupal\search_api_solr\Plugin\search_api\backend\SearchApiSolrBackend::createLocationFilterQuery()

Create a single search query string.

1 call to SearchApiSolrBackend::createLocationFilterQuery()
SearchApiSolrBackend::setSpatial in src/Plugin/search_api/backend/SearchApiSolrBackend.php
Adds spatial features to the search query.

File

src/Plugin/search_api/backend/SearchApiSolrBackend.php, line 1887

Class

SearchApiSolrBackend
Apache Solr backend for search api.

Namespace

Drupal\search_api_solr\Plugin\search_api\backend

Code

protected function createLocationFilterQuery(&$spatial) {
  $spatial_method = isset($spatial['method']) && in_array($spatial['method'], [
    'geofilt',
    'bbox',
  ]) ? $spatial['method'] : 'geofilt';
  $value = $spatial['filter_query_conditions']['value'];
  switch ($spatial['filter_query_conditions']['operator']) {
    case '<':
    case '<=':
      $spatial['radius'] = $value;
      return '{!' . $spatial_method . '}';
    case '>':
    case '>=':
      $spatial['min_radius'] = $value;
      return "{!frange l={$value}}geodist()";
    case 'BETWEEN':
      $spatial['min_radius'] = array_shift($value);
      $spatial['radius'] = array_shift($value);
      return '{!frange l=' . $spatial['min_radius'] . ' u=' . $spatial['radius'] . '}geodist()';
    case '=':
    case '<>':
    case 'NOT BETWEEN':
    case 'IN':
    case 'NOT IN':
    default:
      throw new SearchApiSolrException('Unsupported operator for location queries');
  }
}