In the realm of database search engines, “Manticore Search” emerges as a formidable contender, challenging the status quo with its exceptional speed and cost-efficiency.
This open-source powerhouse stands as a robust alternative to Elasticsearch, offering blazing-fast performance that’s reproducibly ahead of the competition.
In this article, we’ll delve into the unique features and capabilities of Manticore Search, exploring why it has become the go-to choice for organizations seeking unparalleled search and database performance.
Join us on a journey to unlock the power of Manticore Search and revolutionize your data retrieval experience.
Manticore Search is an easy to use open source fast database for search. Good alternative for Elasticsearch. What distinguishes it from other solutions is:
- It’s very fast and therefore more cost-efficient than alternatives, for example Manticore is:
- 182x faster than MySQL for small data (reproducible)
- 29x faster than Elasticsearch for log analytics (reproducible)
- 15x faster than Elasticsearch for small dataset (reproducible)
- 5x faster than Elasticsearch for medium-size data (reproducible)
- 4x faster than Elasticsearch for big data (reproducible)
- up to 2x faster max throughput than Elasticsearch’s for data ingestion on a single server (reproducible)
- With its modern multithreading architecture and efficient query parallelization capabilities, Manticore is able to fully utilize all your CPU cores to achieve the quickest response times possible.
- The powerful and speedy full-text search works seamlessly with both small and large datasets.
- Row-wise storage for small, medium and big size datasets.
- For even larger datasets, Manticore offers columnar storage support through the Manticore Columnar Library, capable of handling datasets too big to fit in RAM.
- Performant secondary indexes are automatically created, saving you time and effort.
- The cost-based query optimizer optimizes search queries for optimal performance.
- Manticore is SQL-first, utilizing SQL as its native syntax, and offers compatibility with the MySQL protocol, allowing you to use your preferred MySQL client.
- Manticore also provides a programmatic HTTP JSON protocol for more versatile data and schema management.
- Built in C++, Manticore Search starts quickly and uses minimal RAM, with low-level optimizations contributing to its impressive performance.
- With real-time inserts, newly added documents are immediately accessible.
- Interactive courses are available through Interactive courses to make learning a breeze.
- Manticore also boasts built-in replication and load balancing for added reliability.
- Data can be synced from sources such as MySQL, PostgreSQL, ODBC, xml, and csv with ease.
- While not fully ACID-compliant, Manticore still supports transactions and binlog to ensure safe writes.
- Effortless data backup and recovery with built-in tools and SQL commands
Manticore Search was forked from Sphinx 2.3.2 in 2017.
- Full-text search and relevance:
- Over 20 full-text operators and over 20 ranking factors
- Custom ranking
- Other search capabilities:
- Natural language processing (NLP):
- Stream filtering using a “percolate” table
- Data can be distributed across servers and data-centers
- Synchronous replication
- Built-in load balancing
- Data safety:
- manticore-backup tool and SQL command BACKUP to back up and restore your data
- Data storages:
- row-wise – requires more RAM, provides faster performance
- columnar – requires less RAM, still provides decent performance, but lower than the row-wise storage for some kinds of queries
- docstore – doesn’t require RAM at all, but allows only fetching original value, not sorting/grouping/filtering
- Performance optimizations:
- Secondary indexes
- Cost-based optimizer determines the most efficient execution plan of a search query
- Data types:
- full-text field – inverted index
- int, bigint and float numeric fields in row-wise and columnar fashion
- multi-value attributes (array)
- string and JSON
- on-disk “stored” for key-value purpose
Docker image is available on Docker Hub.
To experiment with Manticore Search in Docker just run:
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
You can then: create a table, add data and run searches. For example:
create table movies(title text, year int) morphology='stem_en' html_strip='1' stopwords='en'; 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); select highlight(), year from movies where match('the dog'); select highlight(), year from movies where match('days') facet year; select * from movies where match('google');
Note that upon exiting the MySQL client, the Manticore container will be stopped and removed, resulting in no saved data, so use this way only for testing / sandboxing purposes.
Read the full instruction for the docker image for more details including our recommendations on running it in production.
sudo yum install https://repo.manticoresearch.com/manticore-repo.noarch.rpm sudo yum install manticore manticore-extra
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb sudo dpkg -i manticore-repo.noarch.deb sudo apt update sudo apt install manticore manticore-extra
brew install manticoresoftware/tap/manticoresearch manticoresoftware/tap/manticore-extra