/**
  * {@inheritdoc}
  */
 public function build(FacetInterface $facet, array $results)
 {
     $field_identifier = $facet->getFieldIdentifier();
     $entity = 'node';
     // Support multiple entities when using Search API.
     if ($facet->getFacetSource() instanceof SearchApiFacetSourceInterface) {
         $index = $facet->getFacetSource()->getIndex();
         $field = $index->getField($field_identifier);
         $entity = str_replace('entity:', '', $field->getDatasourceId());
     }
     // If it's an entity base field, we find it in the field definitions.
     // We don't have access to the bundle via SearchApiFacetSourceInterface, so
     // we check the entity's base fields only.
     $base_fields = $this->entityFieldManager->getFieldDefinitions($entity, '');
     // This only works for configurable fields.
     $config_entity_name = sprintf('field.storage.%s.%s', $entity, $field_identifier);
     if (isset($base_fields[$field_identifier])) {
         $field = $base_fields[$field_identifier];
     } elseif ($this->configManager->loadConfigEntityByName($config_entity_name) !== NULL) {
         $field = $this->configManager->loadConfigEntityByName($config_entity_name);
     }
     if ($field) {
         $function = $field->getSetting('allowed_values_function');
         if (empty($function)) {
             $allowed_values = $field->getSetting('allowed_values');
         } else {
             $allowed_values = ${$function}($field);
         }
         if (is_array($allowed_values)) {
             /** @var \Drupal\facets\Result\ResultInterface $result */
             foreach ($results as &$result) {
                 if (isset($allowed_values[$result->getRawValue()])) {
                     $result->setDisplayValue($allowed_values[$result->getRawValue()]);
                 }
             }
         }
     }
     return $results;
 }