找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4271

积分

0

好友

555

主题
发表于 1 小时前 | 查看: 4| 回复: 0

Manticore Search 是一款使用 C++ 开发的高性能搜索引擎,诞生于 2017 年,前身是 Sphinx Search。它在 Sphinx 的基础上重构了大量代码,修复了数百个缺陷,并持续保持开源,最终演进成一个现代、快速、轻量且功能齐全的全文搜索数据库。

Manticore Search 在 GitHub 上已收获 3.7k Stars,社区活跃。官方仓库的简介中直接声明:它是 Elasticsearch 的优良替代品,并计划在不久的将来替代 ELK 技术栈中的 E。

Manticore Search GitHub 仓库页面

来自官方的性能测试也印证了这一点:在典型的日志分析和查询场景下,Manticore 相比 Elasticsearch 有质的飞跃。

Manticore 与 Elasticsearch 查询性能对比

在特定场景中,Manticore 甚至比 Elasticsearch 快 15 倍!详细的基准测试报告可参见官方博客:

优势

与其他搜索方案相比,Manticore 有几个突出的杀手锏:

  • 极致性能
    • 小数据量场景,比 MySQL 快 182 倍(可复现)
    • 日志分析场景,比 Elasticsearch 快 29 倍(可复现)
    • 小型数据集,比 Elasticsearch 快 15 倍(可复现)
    • 中型数据,比 Elasticsearch 快 5 倍(可复现)
    • 大型数据,比 Elasticsearch 快 4 倍(可复现)
    • 单机数据导入吞吐量,最高可达 Elasticsearch 的 2 倍(可复现)
  • 现代架构:多线程设计,能充分利用所有 CPU 核心,查询并行化能力极强。
  • 强大全文搜索:无论数据集大小,都能提供快速准确的全文检索。
  • 灵活存储:支持行存(适合小、中、大数据集)以及列存(Manticore Columnar Library),处理超出内存的数据集也无压力。
  • 自动索引:自动创建高效的二级索引,省时省力。
  • 查询优化:内置成本优化型查询优化器,确保最佳性能。
  • SQL 原生:使用 SQL 作为原生语法,兼容 MySQL 协议,可以直接用 MySQL 客户端连接。
  • 多语言客户端:提供 PHP、Python、JavaScript、Java、Elixir、Go 等客户端,集成简单。
  • HTTP JSON 协议:提供程序化接口,方便数据与模式管理。
  • 轻量化:C++ 编写,启动快、内存占用低,底层优化充分。
  • 实时插入:新写入的文档立即可查。
  • 内置复制与负载均衡:增加系统可靠性。
  • 数据同步:可从 MySQL、PostgreSQL、ODBC、XML、CSV 等来源轻松同步数据。
  • 事务与 binlog:虽不完全支持 ACID,但依然提供事务和 binlog 来保证写入安全。
  • 备份恢复:内置工具和 SQL 命令支持数据备份与恢复。

许多知名公司如 Craigslist、Socialgist、PubChem、Rozetka 等,已经使用 Manticore 进行高效搜索和流过滤。

使用

Docker 镜像已上架 Docker Hub:

在 Docker 中快速体验 Manticore Search,只需执行以下命令:

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

进入 MySQL 命令行后,就可以像操作普通数据库一样建表、写数据、搜数据:

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');

完整文档与源码可移步 GitHub:

如果还想进一步探讨搜索引擎选型或性能优化,欢迎来 云栈社区 和更多开发者一起交流实战经验。




上一篇:Redis 大 key 多 key 拆解面试攻略:分桶只是及格线
下一篇:MCP 放弃有状态回归 HTTP 范式:架构工程才是 AI 时代稀缺能力
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-7 03:39 , Processed in 1.037698 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表