Manticore Search 是一个高性能、多存储数据库,专为搜索和分析设计,提供极速的全文搜索、实时索引以及向量搜索和列存储等高级功能,实现高效的数据分析。它既能处理小型数据集,也能处理大型数据集,为现代应用提供无缝扩展性和强大的洞察能力。
作为一个开源数据库(可在 GitHub 获取),Manticore Search 于2017年创建,是对 Sphinx Search 引擎的延续。我们的开发团队汇集了 Sphinx 的所有优点,并显著提升了其功能,修复了数百个漏洞(详见我们的 更新日志)。Manticore Search 是一个现代的、快速且轻量级的数据库,拥有卓越的全文搜索能力,基于对其前身近乎完全的重写构建。
Manticore Search 支持将机器学习模型生成的嵌入向量添加到每个文档中,然后对其执行最近邻搜索。这让您能够构建相似度搜索、推荐系统、语义搜索和基于 NLP 算法的相关性排名等功能,包括图像、视频和音频搜索。
Manticore Search 支持通过 SQL 和 JSON 执行JOIN查询,允许您合并多个表中的数据。
Manticore Search 利用智能查询并行处理来降低响应时间,并在需要时充分利用所有 CPU 核心。
基于成本的查询优化器利用索引数据的统计信息,评估给定查询的不同执行计划的相对成本。这样优化器可以确定检索所需结果的最有效计划,考虑到索引数据大小、查询复杂度及可用资源等因素。
Manticore 提供行存储和列存储选项,以适应不同规模的数据集。传统且默认的行存储选项适用于所有大小的数据集——小型、中型及大型,而列存储选项则通过 Manticore Columnar Library 提供,适用于更大规模的数据集。这两种存储选项的关键区别在于,行存储要求所有属性(全文字段除外)保存在 RAM 中以获得最佳性能,而列存储则不要求,从而实现更低的内存消耗,但可能带来略微较慢的性能(如 https://db-benchmarks.com/ 上的统计所示)。
Manticore Columnar Library 使用分段几何模型索引 (PGM-index),利用索引键与其内存位置之间的学习映射。该映射的紧凑性及独特的递归构建算法使 PGM-index 成为空间效率远超传统索引的数据结构,同时仍提供最优的查询和更新性能。二级索引默认对所有数值和字符串字段开启,也可针对 JSON 属性启用。
Manticore 的原生语法是 SQL,支持通过 HTTP 和 MySQL 协议执行 SQL,允许通过任何编程语言中的流行 MySQL 客户端连接。
为了更程序化地管理数据和模式,Manticore 提供了类似 Elasticsearch 的HTTP JSON协议。
您可以执行兼容 Elasticsearch 的插入和替换 JSON 查询,从而使 Manticore 可与 Logstash(版本 < 7.13)、Filebeat 及 Beats 家族的其他工具一起使用。
轻松在线或通过配置文件创建、更新和删除表。
Manticore Search守护进程用C++编写,提供快速启动时间和高效的内存利用率。低级别的优化进一步提升了性能。另一个关键组件,称为Manticore Buddy,用PHP编写,用于不需要闪电般的响应速度或极高处理能力的高级功能。虽然对C++代码进行贡献可能是一项挑战,但使用Manticore Buddy添加新的SQL/JSON命令应该是简单的过程。
新添加或更新的文档可以立即读取。
我们提供免费互动课程,使学习变得轻松。
虽然Manticore不完全符合ACID标准,但它支持隔离事务以实现原子更改,并支持二进制日志以确保安全写入。
数据可以分布在服务器和数据中心之间,任何Manticore Search节点都可以作为负载均衡器和数据节点。Manticore使用Galera库实现近乎同步的多主复制,确保所有节点的数据一致性,防止数据丢失,并提供出色的复制性能。
Manticore配备了外部工具manticore-backup和BACKUP SQL命令,简化了备份和恢复数据的过程。或者,您可以使用mysqldump进行逻辑备份。
indexer工具和Manticore的全面配置语法使其易于从MySQL、PostgreSQL、ODBC兼容的数据库、XML和CSV等源同步数据。
您可以使用FEDERATED引擎或ProxySQL将Manticore Search与MySQL/MariaDB服务器集成。
您可以使用Apache Superset和Grafana可视化存储在Manticore中的数据。可以使用各种MySQL工具以交互方式开发Manticore查询,例如HeidiSQL和DBForge。
您还可以使用Manticore Search与Kibana。
Manticore提供了一种特殊表类型,即"percolate"表,允许您搜索查询而不是数据,使其成为高效过滤全文数据流的工具。只需将查询存储在表中,通过将每批文档发送到Manticore Search处理数据流,并接收匹配您存储查询的结果。
Manticore Search具有广泛的应用场景,包括:
-
全文搜索:
- 适用于电子商务平台,实现快速准确的产品搜索,具有自动补全和模糊搜索等功能。
- 适用于内容丰富的网站,使用户能够快速找到相关文章或文档。
-
数据分析:
- 使用Beats/Logstash、Vector.dev、Fluentbit将数据导入Manticore Search。
- 使用Manticore的列式存储和OLAP功能高效分析大数据集。
- 使用Manticore在几毫秒内对太字节的数据执行复杂查询。
- 使用Kibana、Grafana或Apache Superset可视化数据。
-
分面搜索:
- 使用户能够通过价格、品牌或日期等类别过滤搜索结果,提供更精细的搜索体验。
-
地理空间搜索:
- 使用Manticore的地理空间功能实现基于位置的搜索,例如查找附近的餐厅或商店。
-
拼写纠正:
- 自动纠正用户在搜索查询中的拼写错误,提高搜索准确性和用户体验。
-
自动补全:
- 实时为用户输入提供建议,提高搜索的可用性和速度。
-
数据流过滤:
- 使用percolate表高效过滤和处理实时数据流,例如社交媒体帖子或日志数据。
- 架构:arm64或x86_64
- 操作系统:基于Debian(例如Debian、Ubuntu、Mint)、基于RHEL(例如RHEL、CentOS、Alma、Oracle Linux、Amazon Linux)、Windows或MacOS。
- Manticore列库,提供列式存储和二级索引,需要具有SSE >= 4.2的CPU。
- 对磁盘空间或RAM没有特定要求。一个空的Manticore Search实例仅使用大约40MB的RSS RAM。
本手册的编排旨在反映您最可能使用 Manticore 的方式:
- 从关于它的基本信息以及如何安装和连接开始
- 添加文档和运行搜索等基本操作
- 性能优化技巧、窍门,以及借助插件和自定义函数扩展 Manticore
为了方便起见,手册的关键部分在菜单中用 1️⃣、2️⃣、3️⃣ 等标记,因为它们对应的功能最常用。如果您是 Manticore 的新手,我们强烈建议不要跳过它们。
如果您想快速了解 Manticore 的一般工作原理,⚡ 快速入门指南 是一个很好的起点。
每个查询示例的右上角都有一个小图标 📋:

您可以使用它将示例复制到剪贴板。如果查询是 HTTP 请求,它将被复制为 CURL 命令。您可以按 ⚙️ 配置主机/端口。
我们热爱搜索,并已尽最大努力使在本手册中搜索尽可能方便。当然,它由 Manticore Search 提供支持。除了使用需要先打开手册的搜索栏外,还有一种非常简单的方法可以找到某些内容,只需打开 mnt.cr/您的搜索关键词:

关于 Manticore Search,有几件事您需要了解,这有助于您遵循使用它的最佳实践。
- 实时表 允许添加、更新和删除文档,并且更改立即可用。
- 普通表 是一种基本不可变的数据结构,也是实时表使用的基本元素。普通表存储一组文档、它们的公共字典和索引设置。一个实时表可以由多个普通表(块)组成,但除此之外,Manticore 提供了使用工具 indexer 直接构建普通表的途径。当您的数据基本不可变时,这样做是有意义的,因此您不需要为此使用实时表。
Manticore Search 在两种模式下工作:
- 实时模式(RT 模式)。这是默认模式,允许命令式管理您的数据模式:
- 允许使用 SQL 命令
CREATE/ALTER/DROP TABLE及其在非 SQL 客户端中的等效命令在线管理您的数据模式 - 在配置文件中,您只需要定义与服务器相关的设置,包括 data_dir
- 允许使用 SQL 命令
- 普通模式 允许在配置文件中定义您的数据模式,即提供声明式的模式管理。这在三种情况下有意义:
- 当您只处理普通表时
- 或者当您的数据模式非常稳定且不需要复制时(因为复制仅在 RT 模式下可用)
- 当您需要使您的数据模式可移植时(例如,为了更容易地在新服务器上部署)
您不能混合使用这两种模式,需要通过指定配置文件中的 data_dir 来决定要遵循哪种模式(这是默认行为)。如果您不确定,我们的建议是遵循 RT 模式,因为即使您需要一个普通表,您也可以使用单独的普通表配置构建它,并导入到您的主 Manticore 实例中。
实时表可以在 RT 模式和普通模式下使用。在 RT 模式下,实时表使用 CREATE TABLE 命令定义,而在普通模式下,它在配置文件中定义。普通(离线)表仅在普通模式下受支持。普通表不能在 RT 模式下创建,但在普通模式下创建的现有普通表可以转换为实时表并在 RT 模式下导入。
Manticore 提供了多种方式和接口来管理您的模式和数据,但两个主要的是:
- SQL。这是 Manticore 的原生语言,支持 Manticore 的所有功能。最佳实践是使用 SQL 来:
- 管理您的模式并执行其他 DBA 例程,因为这是最简单的方法
- 设计您的查询,因为 SQL 比 JSON DSL 更接近自然语言,这在您设计新内容时很重要。您可以通过任何 MySQL 客户端或 /sql 使用 Manticore SQL。
- JSON。大多数功能也可以通过 JSON 领域特定语言使用。当您将 Manticore 集成到您的应用程序中时,这尤其有用,因为使用 JSON 可以比使用 SQL 更以编程方式实现。最佳实践是首先探索如何通过 SQL 完成某些操作,然后使用 JSON 将其集成到您的应用程序中。
- RHEL, Centos, Alma, Amazon, Oracle
- Debian, Ubuntu, Mint
- MacOS
- Windows
- Docker
- Kubernetes
sudo yum install https://repo.manticoresearch.com/manticore-repo.noarch.rpm
sudo yum install manticore如果您是从旧版本升级,建议先移除旧包,以避免因包结构更新导致的冲突:
sudo yum --setopt=tsflags=noscripts remove manticore*这不会删除您的数据。如果您更改了配置文件,它会被保存到 /etc/manticoresearch/manticore.conf.rpmsave。
如果您需要单独的安装包,请在这里查找。
有关安装的更多详情,请参见下文。
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt update
sudo apt install manticore如果您是从旧版本升级到 Manticore 6,建议先移除旧包,以避免因包结构更新导致的冲突:
sudo apt remove manticore*这不会删除您的数据或配置文件。
如果您需要单独的安装包,请在这里查找。
有关安装的更多详情,请参见下文。
brew install manticoresoftware/tap/manticoresearch manticoresoftware/tap/manticore-extra有关安装的更多详情,请参见下文。
- 下载 Manticore Search 安装程序 并运行,按照安装提示操作。
- 选择安装目录。
- 选择您想安装的组件。我们推荐全部安装。
- Manticore 附带一个预配置的
manticore.conf文件,处于 RT 模式。无需额外配置。
有关安装的更多详情,请参见下文。
一个用于沙箱测试的单行命令(不推荐用于生产环境):
docker run --name manticore --rm -d manticoresearch/manticore && echo "Waiting for Manticore docker to start. Consider mapping the data_dir to make it start faster next time" && until docker logs manticore 2>&1 | grep -q "accepting connections"; do sleep 1; echo -n .; done && echo && docker exec -it manticore mysql && docker stop manticore此命令运行 Manticore 容器并等待其启动。启动后,它会开启一个 MySQL 客户端会话。当您退出 MySQL 客户端时,Manticore 容器停止运行并被删除,不会留下任何数据。关于如何在生产环境中使用 Manticore,请参见下一节。
用于生产环境:
docker run --name manticore -v $(pwd)/data:/var/lib/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore此配置将启用 Manticore 列存库和 Manticore Buddy,并使用 ./data/ 作为指定数据目录,把 Manticore 运行在 9306 端口用于 MySQL 连接,9308 端口用于其他所有连接。
更多关于生产环境使用信息,请阅读文档。
helm repo add manticoresearch https://helm.manticoresearch.com
# Update values.yaml if needed
helm install manticore -n manticore --create-namespace manticoresearch/manticoresearch您可以在文档中找到有关安装 Helm Chart 的更多信息。
Manticore Search 的 Docker 镜像可在 Docker Hub 公共访问,镜像由 Manticore Search docker GitHub 仓库 构建。
要拉取 Manticore 镜像,请运行以下命令:
docker pull manticoresearch/manticore
有关在 Docker 中使用 Manticore 的更多信息,请参见 在 Docker 中使用 Manticore 部分。