diff --git a/src/Plugin/views/cache/SearchApiNoneCache.php b/src/Plugin/views/cache/SearchApiNoneCache.php
new file mode 100644
index 0000000..a6998d8
--- /dev/null
+++ b/src/Plugin/views/cache/SearchApiNoneCache.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace Drupal\search_api\Plugin\views\cache;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\search_api\Plugin\views\query\SearchApiQuery;
+use Drupal\search_api\SearchApiException;
+use Drupal\views\Plugin\views\cache\None;
+use Drupal\views\Plugin\views\cache\Tag;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Defines a tag-based cache plugin for use with Search API views.
+ *
+ * This cache plugin basically sets an unlimited cache life time for the view,
+ * but the view will be refreshed when any of its cache tags are invalidated.
+ *
+ * Use this for search results views that are fully controlled by a single
+ * Drupal instance. A common use case is a website that uses the default
+ * database search backend and does not index any external data sources.
+ *
+ * @ingroup views_cache_plugins
+ *
+ * @ViewsCache(
+ *   id = "search_api_none",
+ *   title = @Translation("Search API (none)"),
+ *   help = @Translation("Cache results until the associated cache tags are invalidated. Useful for small sites that use the database search backend. <strong>Caution:</strong> Can lead to stale results and might harm performance for complex search pages.")
+ * )
+ */
+class SearchApiNoneCache extends None {
+
+  /**
+   * Retrieves the Search API Views query for the current view.
+   *
+   * @return \Drupal\search_api\Plugin\views\query\SearchApiQuery|null
+   *   The Search API Views query associated with the current view.
+   *
+   * @throws \Drupal\search_api\SearchApiException
+   *   Thrown if there is no current Views query, or it is no Search API query.
+   */
+  protected function getQuery() {
+    $query = $this->view->getQuery();
+    if ($query instanceof SearchApiQuery) {
+      return $query;
+    }
+    throw new SearchApiException('No matching Search API Views query found in view.');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheTags() {
+    $tags = $this->view->storage->getCacheTags();
+    $tag = 'search_api_list:' . $this->getQuery()->getIndex()->id();
+    $tags = Cache::mergeTags([$tag], $tags);
+    return $tags;
+  }
+
+}
