diff --git a/src/Backend/BackendInterface.php b/src/Backend/BackendInterface.php
index 55038c3..01d7ada 100644
--- a/src/Backend/BackendInterface.php
+++ b/src/Backend/BackendInterface.php
@@ -81,4 +81,16 @@ interface BackendInterface extends ConfigurablePluginInterface, BackendSpecificI
    */
   public function preDelete();
 
+  /**
+   * Limits the processors exposed in the UI per backend.
+   *
+   * Returns an array of processor ID's that suboptimal to implement for this
+   * backend. It is a bad idea, for example, to have the tokenizer plugin
+   * enabled when using a solr backend.
+   *
+   * @return string[]
+   *   A list of processor ID's
+   */
+  public function limitProcessorSuggestions();
+
 }
diff --git a/src/Backend/BackendPluginBase.php b/src/Backend/BackendPluginBase.php
index ecb1662..3f2f2b4 100644
--- a/src/Backend/BackendPluginBase.php
+++ b/src/Backend/BackendPluginBase.php
@@ -154,6 +154,13 @@ abstract class BackendPluginBase extends ConfigurablePluginBase implements Backe
   public function removeIndex($index) {}
 
   /**
+   * {@inheritdoc}
+   */
+  public function limitProcessorSuggestions() {
+    return array();
+  }
+
+  /**
    * Implements the magic __sleep() method.
    *
    * Prevents the server entity from being serialized.
diff --git a/src/Form/IndexProcessorsForm.php b/src/Form/IndexProcessorsForm.php
index 486889a..37ea1c8 100644
--- a/src/Form/IndexProcessorsForm.php
+++ b/src/Form/IndexProcessorsForm.php
@@ -96,6 +96,28 @@ class IndexProcessorsForm extends EntityForm {
       $processors_by_stage[$stage] = $this->entity->getProcessorsByStage($stage, FALSE);
     }
 
+    if (!is_null($this->entity->getServer())) {
+      $backend_limited_processors = $this->entity->getServer()
+        ->getBackend()
+        ->limitProcessorSuggestions();
+
+      // Remove processors from the overview.
+      foreach ($all_processors as $key => $processor) {
+        if (in_array($key, $backend_limited_processors)) {
+          unset($all_processors[$key]);
+        }
+      }
+
+      // Remove processors from the stages.
+      foreach ($processors_by_stage as $stage => $processors) {
+        foreach ($processors as $key => $processor) {
+          if (in_array($key, $backend_limited_processors)) {
+            unset($processors_by_stage[$stage][$key]);
+          }
+        }
+      }
+    }
+
     $processor_settings = $this->entity->getOption('processors');
 
     $form['#tree'] = TRUE;
diff --git a/src/Tests/Processor/ProcessorIntegrationTest.php b/src/Tests/Processor/ProcessorIntegrationTest.php
index 65b7b60..53373c9 100644
--- a/src/Tests/Processor/ProcessorIntegrationTest.php
+++ b/src/Tests/Processor/ProcessorIntegrationTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\search_api\Tests\Processor;
 
 use Drupal\search_api\Entity\Index;
+use Drupal\search_api\Entity\Server;
 use Drupal\search_api\Tests\WebTestBase;
 
 /**
@@ -64,6 +65,43 @@ class ProcessorIntegrationTest extends WebTestBase {
   }
 
   /**
+   * Test that the "Alter processors test backend" actually alters processors.
+   *
+   * @see https://www.drupal.org/node/2228739
+   */
+  public function testLimitProcessors() {
+    $this->loadProcessorsTab();
+    $this->assertResponse(200);
+    $this->assertText($this->t('Highlight'));
+    $this->assertText($this->t('Ignore character'));
+    $this->assertText($this->t('Tokenizer'));
+    $this->assertText($this->t('Stopwords'));
+
+    // Create a new server with the "search_api_test_backend" backend.
+    $server = Server::create(array(
+      'id' => 'webtest_server',
+      'name' => 'WebTest server',
+      'description' => 'WebTest server',
+      'backend' => 'search_api_test_alter_processors_backend',
+      'backend_config' => array(),
+    ));
+    $server->save();
+
+    // Use the newly created server.
+    $settings_path = 'admin/config/search/search-api/index/' . $this->indexId . '/edit';
+    $this->drupalGet($settings_path);
+    $this->drupalPostForm(NULL, array('server' => 'webtest_server'), $this->t('Save'));
+
+    // Load the processors again and check that they are not shown anymore.
+    $this->loadProcessorsTab();
+    $this->assertResponse(200);
+    $this->assertNoText($this->t('Highlight'));
+    $this->assertNoText($this->t('Ignore character'));
+    $this->assertNoText($this->t('Tokenizer'));
+    $this->assertNoText($this->t('Stopwords'));
+  }
+
+  /**
    * Tests the UI for the "Content access" processor.
    */
   public function checkContentAccessIntegration() {
diff --git a/tests/search_api_test_backend/config/schema/search_api_test_alter_processors_backend.schema.yml b/tests/search_api_test_backend/config/schema/search_api_test_alter_processors_backend.schema.yml
new file mode 100644
index 0000000..dbb2bd3
--- /dev/null
+++ b/tests/search_api_test_backend/config/schema/search_api_test_alter_processors_backend.schema.yml
@@ -0,0 +1,7 @@
+search_api.backend.plugin.search_api_test_alter_processors_backend:
+  type: mapping
+  label: Test backend
+  mapping:
+    test:
+      type: string
+      label: Test configuration
diff --git a/tests/search_api_test_backend/src/Plugin/search_api/backend/TestAlterProcessorsBackend.php b/tests/search_api_test_backend/src/Plugin/search_api/backend/TestAlterProcessorsBackend.php
new file mode 100644
index 0000000..eb663b5
--- /dev/null
+++ b/tests/search_api_test_backend/src/Plugin/search_api/backend/TestAlterProcessorsBackend.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\search_api_test_backend\Plugin\search_api\backend\TestAlterProcessorsBackend.
+ */
+
+namespace Drupal\search_api_test_backend\Plugin\search_api\backend;
+
+/**
+ * Provides a dummy backend for testing purposes.
+ *
+ * This backend alters the available processors to test for the
+ * ::limitProcessorSuggestions functionality
+ *
+ * @SearchApiBackend(
+ *   id = "search_api_test_alter_processors_backend",
+ *   label = @Translation("Test backend"),
+ *   description = @Translation("Dummy backend implementation")
+ * )
+ */
+class TestAlterProcessorsBackend extends TestBackend {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function limitProcessorSuggestions() {
+    return array('highlight', 'ignore_character', 'tokenizer', 'stopwords');
+  }
+}
