protected function SearchApiElasticsearchElastica::addSearchAggregation in Search API Elasticsearch 7
Helper function build Aggregations in search.
2 calls to SearchApiElasticsearchElastica::addSearchAggregation()
- SearchApiElasticsearchElastica::search in modules/
elastica/ includes/ SearchApiElasticsearchElastica.inc - Overrides search().
- SearchApiElasticsearchElastica::searchMultiple in modules/
elastica/ includes/ SearchApiElasticsearchElastica.inc - Implements SearchApiMultiServiceInterface::searchMultiple().
File
- modules/
elastica/ includes/ SearchApiElasticsearchElastica.inc, line 683 - Provides Elastica client for Search API Elasticsearch.
Class
- SearchApiElasticsearchElastica
- Search API Elasticsearch Elastica service class.
Code
protected function addSearchAggregation(Elastica\Query $elastica_query, SearchApiQueryInterface $query) {
// SEARCH API FACETS.
$aggs = $query
->getOption('search_api_facets');
$index_fields = $this
->getIndexFields($query);
if (!empty($aggs)) {
// Loop trough Aggregations.
foreach ($aggs as $agg_id => $agg_info) {
$agg = NULL;
$field_id = $agg_info['field'];
// Skip if not recognized as a known field.
if (!isset($index_fields[$field_id])) {
continue;
}
$agg_missing = $agg_info['missing'];
$field_type = search_api_extract_inner_type($index_fields[$field_id]['type']);
// TODO: handle different types (GeoDistance and so on).
if ($field_type === 'date') {
$agg = $this
->createDateFieldAggregation($agg_id);
}
else {
if ($field_type === 'string') {
//Check if string is latlong
if (strpos($agg_id, 'latlon') !== false) {
//This is a latitude and longitude pair.
}
else {
$agg = new Elastica\Aggregation\Terms($agg_id);
}
}
else {
$agg = new Elastica\Aggregation\Terms($agg_id);
// We may want missing Aggregation.
//$Agg->setAllTerms($agg_missing);
}
}
// Add the Aggregation.
if (!empty($agg)) {
// Add Aggregation options.
$agg = $this
->addAggregationOptions($agg, $query, $agg_info, $elastica_query, $field_type);
$elastica_query
->addAggregation($agg);
}
}
}
}