diff --git a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
index c09d652..7bb815e 100644
--- a/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
+++ b/modules/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
@@ -355,4 +355,11 @@ public function calculateDependencies() {
     return ['module' => ['node', 'search']];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDefinitions() {
+    // Get and return an array field definitions.
+  }
+
 }
diff --git a/src/FacetSource/FacetSourcePluginBase.php b/src/FacetSource/FacetSourcePluginBase.php
index 14317fb..f64f021 100644
--- a/src/FacetSource/FacetSourcePluginBase.php
+++ b/src/FacetSource/FacetSourcePluginBase.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\facets\Exception\Exception;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Facets\FacetInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -146,4 +147,15 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
     $this->facet->setFieldIdentifier($field_identifier);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDefinition($field_name) {
+    if (isset($this->getFieldDefinitions()[$field_name])) {
+      return $this->getFieldDefinitions()[$field_name];
+    }
+
+    throw new Exception("Field with name {$field_name} does not have a definition");
+  }
+
 }
diff --git a/src/FacetSource/FacetSourcePluginInterface.php b/src/FacetSource/FacetSourcePluginInterface.php
index 733ad79..1f52f2f 100644
--- a/src/FacetSource/FacetSourcePluginInterface.php
+++ b/src/FacetSource/FacetSourcePluginInterface.php
@@ -98,4 +98,18 @@ public function setSearchKeys($keys);
    */
   public function getSearchKeys();
 
+  /**
+   * Returns the defined fields indexed on the facet source.
+   *
+   * @return \Drupal\Core\TypedData\DataDefinitionInterface[]
+   */
+  public function getFieldDefinitions();
+
+  /**
+   * Returns one defined field from the facet source.
+   *
+   * @return \Drupal\Core\TypedData\DataDefinitionInterface
+   */
+  public function getFieldDefinition($field_name);
+
 }
diff --git a/src/Plugin/facets/facet_source/SearchApiDisplay.php b/src/Plugin/facets/facet_source/SearchApiDisplay.php
index 3ae02ab..57fd912 100644
--- a/src/Plugin/facets/facet_source/SearchApiDisplay.php
+++ b/src/Plugin/facets/facet_source/SearchApiDisplay.php
@@ -320,4 +320,14 @@ public function getDisplay() {
       ->createInstance($this->pluginDefinition['display_id']);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getFieldDefinitions() {
+    return array_map(function ($item) {
+      /** @var \Drupal\search_api\Item\FieldInterface $item */
+      return $item->getDataDefinition();
+    }, $this->getIndex()->getFields());
+  }
+
 }
diff --git a/src/Plugin/facets/processor/TranslateEntityProcessor.php b/src/Plugin/facets/processor/TranslateEntityProcessor.php
index 16cbac5..410f302 100644
--- a/src/Plugin/facets/processor/TranslateEntityProcessor.php
+++ b/src/Plugin/facets/processor/TranslateEntityProcessor.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\TypedData\TranslatableInterface;
+use Drupal\facets\Exception\InvalidProcessorException;
 use Drupal\facets\FacetInterface;
 use Drupal\facets\Plugin\facets\facet_source\SearchApiDisplay;
 use Drupal\facets\Processor\BuildProcessorInterface;
@@ -80,35 +81,24 @@ public static function create(ContainerInterface $container, array $configuratio
   public function build(FacetInterface $facet, array $results) {
     $language_interface = $this->languageManager->getCurrentLanguage();
 
-    $ids = [];
+    /** @var \Drupal\Core\TypedData\DataDefinitionInterface $field_definition */
+    $field_definition = $facet->getFacetSource()
+      ->getFieldDefinition($facet->getFieldIdentifier());
+    if ($field_definition->getPropertyDefinition('entity') === NULL) {
+      throw new InvalidProcessorException("Field doesn't have an entity definition, so this processor doesn't work.");
+    }
+
+    $entity_type = $field_definition
+      ->getPropertyDefinition('entity')
+      ->getTargetDefinition()
+      ->getEntityTypeId();
 
     /** @var \Drupal\facets\Result\ResultInterface $result */
+    $ids = [];
     foreach ($results as $delta => $result) {
       $ids[$delta] = $result->getRawValue();
     }
 
-    // Default to nodes.
-    $entity_type = 'node';
-    $source = $facet->getFacetSource();
-
-    // Support multiple entity types when using Search API.
-    if ($source instanceof SearchApiDisplay) {
-
-      $field_id = $facet->getFieldIdentifier();
-
-      // Load the index from the source, load the definition from the
-      // datasource.
-      /** @var \Drupal\facets\FacetSource\SearchApiFacetSourceInterface $source */
-      $index = $source->getIndex();
-      $field = $index->getField($field_id);
-
-      // Determine the target entity type.
-      $entity_type = $field->getDataDefinition()
-        ->getPropertyDefinition('entity')
-        ->getTargetDefinition()
-        ->getEntityTypeId();
-    }
-
     // Load all indexed entities of this type.
     $entities = $this->entityTypeManager
       ->getStorage($entity_type)
diff --git a/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php
index 373c3f0..e62c4c2 100644
--- a/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php
+++ b/tests/src/Unit/Plugin/processor/TranslateEntityProcessorTest.php
@@ -75,25 +75,13 @@ protected function setUp() {
       ->method('getPropertyDefinition')
       ->willReturn($property_definition);
 
-    // Add the typed data definition to the search api field.
-    $field = $this->getMock(FieldInterface::class);
-    $field->expects($this->any())
-      ->method('getDataDefinition')
-      ->willReturn($data_definition);
-
-    // Add the search api field to the index.
-    $index = $this->getMock(IndexInterface::class);
-    $index->expects($this->any())
-      ->method('getField')
-      ->willReturn($field);
-
     // Create a search api based facet source and link the index to it.
     $facet_source = $this->getMockBuilder(SearchApiDisplay::class)
       ->disableOriginalConstructor()
       ->getMock();
     $facet_source->expects($this->any())
-      ->method('getIndex')
-      ->willReturn($index);
+      ->method('getFieldDefinition')
+      ->willReturn($data_definition);
 
     // Create the actual facet.
     $this->facet = $this->getMockBuilder(Facet::class)
