Search API Manticore
This module provides a Search API backend for Manticore Search, a fast and lightweight full-text search engine. It allows you to index Drupal content and search it using Manticore's HTTP JSON API, enabling features like full-text search, semantic search with native embeddings, and faceted search through Views.
A Search API backend for Manticore Search — fast, lightweight, open-source full-text search, connected over Manticore's HTTP JSON API.
The module is a thin, well-tested wrapper over the official manticoresoftware/manticoresearch-php SDK. It brings Manticore to the standard Drupal search stack: index any Search API datasource, build search pages with Views, and add facets with the Facets module. Beyond classic full-text search it also offers semantic and hybrid search: matching by meaning using Manticore's native vector embeddings, on its own or fused with keyword relevance, all configurable in Views with no custom code.
Why Manticore?
Manticore Search is an open-source search engine (GPL-2.0 family, C++ core) designed as a lighter, faster alternative for full-text workloads: low memory footprint, columnar storage, SQL and JSON APIs, and straightforward single-binary deployment. For Drupal sites that have outgrown database search but don't want the operational weight of a Java-based search stack, it is a compelling middle ground.
Manticore also performs vector search with engine-side auto-embeddings: it generates embeddings itself from local sentence-transformer models at index and query time, so Drupal never computes or transmits a vector and no external embedding API or API key is involved. The models run on CPU, with no GPU required, so semantic search works on an ordinary VPS rather than demanding specialised hardware.
How it's built
- HTTP JSON API only — the module speaks Manticore's JSON API through the official PHP SDK; no MySQL-protocol dependency.
- Thin backend, clean seams — the Search API backend plugin delegates to a translation layer; the SDK is isolated behind an interface, and a connector plugin system leaves room for alternative transports.
- Authentication via the Key module — HTTP Basic Auth passwords live in Key entities (configuration, file, or environment providers), not in exported config.
- Write-path lifecycle events — six events (pre / alter / post, around both indexing and deletion) let other modules inspect or alter every engine write. Documented in the README.
- Tested against a real engine — unit tests mock the client seam; kernel and functional tests run against a live Manticore server in CI, across the supported Drupal versions.
Feature matrix
Status of the standard Search API backend features (per the server backends and features reference):
Search API feature Key Status Facetssearch_api_facets
✅ Supported — any indexed field, including per-element counts on multi-value fields
Facets with OR operator
search_api_facets_operator_or
✅ Supported — multi-select facets keep their sibling counts
Autocomplete
search_api_autocomplete
✅ Supported
More Like This
search_api_mlt
✅ Supported — fulfilled by vector similarity (related items via Views)
Random sort
search_api_random_sort
✅ Supported — via the Global: Random Views sort criterion
Spellcheck
search_api_spellcheck
❌ Not supported yet
Grouping
search_api_grouping
❌ Not supported yet
Location (data type)
location / geohash
❌ Not supported yet
Core search capabilities (no feature key — part of every Search API backend's contract):
Capability Status Full-text search through Views and the Search API query API, including the Direct parse mode ✅ Supported All six built-in field types — text, string, integer, decimal, date, boolean ✅ Supported, single- and multi-value Filtering, including multi-value fields ✅ Supported Sorting on relevance and on field values — every indexed field except full-text fields ✅ Supported Random sort ✅ Supported — shuffles results into a random order Faceting on multi-value fields ✅ Supported — each value is counted separately (per element), with no extra configuration Paging with exact result counts at any depth ✅ Supported Language filtering / multilingual indexes ✅ Supported Search excerpts / highlighting ✅ Supported — engine-native highlighting, <strong> fragments; the core Highlight processor overrides it if enabled Vector / semantic search ✅ Supported — Manticore-nativefloat_vector with engine-side auto-embeddings; pure semantic, RRF hybrid, and intersection modes, via Views
Anything marked not supported is not advertised to Search API, so nothing degrades silently — unsupported features simply don't appear as options.
Requirements
- Drupal 10.5+ or 11
- PHP 8.3+
- A running Manticore Search server — developed and tested against Manticore 27.1.5; support for additional engine versions is added based on user reports.
- Search API and Key (installed automatically by Composer)
The recommended way to run the engine is the dillix/manticore-docker Compose stack — a local no-auth scenario and a public TLS + Basic Auth scenario behind Caddy, both pre-configured for this module.
Getting started
composer require drupal/search_api_manticore drush en search_api_manticore
The README covers the rest: server configuration walkthrough, index setup, the recommended Docker stack, troubleshooting, and how to run the test suite.
Maintainer
- dillix (Mikhail Khasaya)