Databases 7 min read

Manticore Search: Lightweight Elasticsearch Alternative Claims 15x Speed Gains

Manticore Search, a C++-based search engine forked from Sphinx, claims to outperform Elasticsearch by up to 15x on small datasets and 4x on large data, offering SQL syntax, MySQL protocol compatibility, real-time inserts, and built-in replication while using minimal memory.

Architect's Guide
Architect's Guide
Architect's Guide
Manticore Search: Lightweight Elasticsearch Alternative Claims 15x Speed Gains

Manticore Search Introduction

Manticore Search is a high-performance search engine written in C++, created in 2017 as a fork of Sphinx Search. It has significantly improved upon Sphinx's functionality, fixed hundreds of bugs, and nearly completely rewritten the codebase while remaining open source. The project has garnered 3.7k stars on GitHub and positions itself as a strong alternative to Elasticsearch, with the goal of replacing the "E" in the ELK stack.

Performance Benchmarks

Official benchmarks from Manticore Research demonstrate substantial performance advantages over Elasticsearch across various scenarios:

For small datasets: 182x faster than MySQL (reproducible)

For log analysis: 29x faster than Elasticsearch (reproducible)

For small datasets: 15x faster than Elasticsearch (reproducible)

For medium-sized data: 5x faster than Elasticsearch (reproducible)

For large datasets: 4x faster than Elasticsearch (reproducible)

Single-server data import throughput: up to 2x faster than Elasticsearch (reproducible)

The performance gains are attributed to Manticore's modern multi-threaded architecture and efficient query parallelization, which fully utilize all CPU cores for minimal response times. Full benchmark details are available at: https://manticoresearch.com/blog/manticore-alternative-to-elasticsearch/

Key Features and Advantages

Speed and cost-effectiveness: Outperforms alternatives across data sizes

Storage flexibility: Row storage for small/medium/large datasets; columnar storage via Manticore Columnar Library for datasets exceeding memory

Automatic secondary indexes: Created automatically, saving time and effort

Cost-optimized query optimizer: Optimizes search queries for best performance

SQL-based with MySQL protocol compatibility: Uses SQL as native syntax; works with preferred MySQL clients

Multi-language client support: PHP, Python, JavaScript, Java, Elixir, Go

HTTP JSON protocol: For diverse data and schema management

C++ implementation: Fast startup, minimal memory usage, low-level optimizations

Real-time inserts: New documents immediately accessible

Built-in replication and load balancing: Increases reliability

Data synchronization: From MySQL, PostgreSQL, ODBC, XML, CSV

Transactions and binlog: Supports transactions and binary logging for safe writes (not fully ACID-compliant)

Backup and restore: Built-in tools and SQL commands

Companies using Manticore in production include Craigslist, Socialgist, PubChem, and Rozetka for efficient search and stream filtering.

Installation and Usage

Installation guide: https://manticoresearch.com/install/

Docker image available at: https://hub.docker.com/r/manticoresearch/manticore/

To run Manticore Search in Docker:

docker run -e EXTRA=1 --name manticore --rm -d manticoresearch/manticore && until docker logs manticore 2>&1 | grep -q "accepting connections"; do sleep 1; done && docker exec -it manticore mysql && docker stop manticore

SQL Examples

Create a table with full-text search configuration:

create table movies(title text, year int) morphology='stem_en' html_strip='1' stopwords='en';

Insert sample data:

insert into movies(title, year) values ('The Seven Samurai', 1954), ('Bonnie and Clyde', 1954), ('Reservoir Dogs', 1992), ('Airplane!', 1980), ('Raging Bull', 1980), ('Groundhog Day', 1993), ('<a href="http://google.com/">Jurassic Park</a>', 1993), ('Ferris Bueller\'s Day Off', 1986);

Search with highlighting:

select highlight(), year from movies where match('the dog');

Search with faceting:

select highlight(), year from movies where match('days') facet year;

Search for HTML-stripped content:

select * from movies where match('google');

Resources

GitHub repository: https://github.com/manticoresoftware/manticoresearch

Full documentation and open source code available at the GitHub repository

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

Docker deploymentfull-text searchperformance benchmarksManticore SearchElasticsearch alternativeC++ search engineSphinx Search forkSQL-based search
Architect's Guide
Written by

Architect's Guide

Dedicated to sharing programmer-architect skills—Java backend, system, microservice, and distributed architectures—to help you become a senior architect.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.