Manticore Search 全文检索
什么是 Manticore Search
Manticore Search 是一款高性能开源全文检索引擎,支持中文分词,兼容 MySQL 协议。MDMS 集成 Manticore 后,搜索性能可以从"遍历文件"提升到"毫秒级精确匹配"。
MDMS 的搜索有两种模式:未启用 Manticore 时,使用 Go 内置的 JSON 索引遍历搜索(适合千篇以内);启用 Manticore 后,自动切换到全文检索(适合万篇以上),关闭时自动降级回 Go 搜索,不影响任何功能。
环境要求
操作系统: Linux(CentOS 7+ / Ubuntu 20.04+ / Debian 11+)
内存: Manticore 本身占用约 50-100MB,建议服务器总内存不低于 2GB
磁盘: 索引数据大约是原始内容的 30-50%,1 万篇文章大约占用 50-100MB 索引空间
端口: 默认使用 9306(MySQL 协议)和 9308(HTTP API),确保未被占用
安装 Manticore Search
CentOS / AlmaLinux / Rocky Linux
curl -sSL https://repo.manticoresearch.com/manticore-repo.noarch.rpm -o manticore-repo.rpm
rpm -i manticore-repo.rpm
yum install -y manticore manticore-columnar-lib
Ubuntu / Debian
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
dpkg -i manticore-repo.noarch.deb
apt update
apt install -y manticore manticore-columnar-lib
Docker 方式(可选)
docker run -d \
--name manticore \
-p 9306:9306 \
-p 9308:9308 \
-v manticore_data:/var/lib/manticore \
--restart=always \
manticoresearch/manticore
启动和验证
启动服务
systemctl enable manticoresearch
systemctl start manticoresearch
验证是否运行
systemctl status manticoresearch
看到 active (running) 表示启动成功。
测试连接
mysql -h 127.0.0.1 -P 9306 -e "SHOW STATUS"
能看到一张包含 uptime、version 等字段的表格,说明 Manticore 运行正常。如果提示 mysql 命令不存在,先安装 MySQL 客户端:
CentOS: yum install -y mysql
Ubuntu: apt install -y mysql-client
注意: 这里只是借用 MySQL 客户端来测试连接,Manticore 本身不是 MySQL,不需要安装 MySQL 服务端。
在 MDMS 后台配置
安装完成并确认运行后,进入 MDMS 后台操作:
第一步: 打开后台左侧菜单「Manticore Search」
第二步: 将「启用 Manticore Search」开关打开
第三步: Host 填写 127.0.0.1(如果 Manticore 和 MDMS 在同一台服务器,保持默认即可)
第四步: Port 填写 9306(Manticore 默认的 MySQL 协议端口)
第五步: 点击「保存配置」
保存成功后,页面会显示连接状态。如果显示绿色"已连接",说明配置正确。
索引管理
全量重建索引
首次启用或内容发生大量变化时,需要全量重建索引。在 Manticore 管理页面点击「全量重建」按钮,系统会扫描所有文章并写入 Manticore 索引。进度会实时显示在页面上。
重建速度大约为每秒 100-200 篇文章,1 万篇文章大约需要 1 分钟。
增量索引
日常使用中不需要手动操作。MDMS 启用了文件监听(fsnotify),当 content/md 目录下的 Markdown 文件发生变化(新增、修改、删除)时,会自动同步到 Manticore 索引。
清空索引
如果需要完全重来,可以点击「清空索引」按钮,清空后再执行一次全量重建即可。
多站点共存
如果同一台服务器上运行了多个 MDMS 实例,它们可以共用同一个 Manticore Search 服务。每个 MDMS 实例使用独立的索引表名(默认为 mms_articles),数据互不干扰。
注意: 如果需要自定义索引表名以避免冲突,可以在源码 handler/manticore.go 中修改 mcTable 常量。未来版本会将此项移入后台配置。
常见问题
保存配置后提示"连接失败"
检查 Manticore 是否在运行: systemctl status manticoresearch
检查端口是否正确: 默认是 9306,不是 3306(3306 是 MySQL)
检查防火墙: firewall-cmd --list-ports 确认 9306 端口未被拦截(本机连接通常不受影响)
搜索结果为空
可能索引还没建立。进入 Manticore 管理页面,检查「已索引文章数」是否为 0,如果是,点击「全量重建」。
Manticore 服务挂了怎么办
MDMS 有自动降级机制。Manticore 不可用时,搜索会自动回退到 Go 内置的 JSON 遍历搜索,前台用户不会感知到异常。修复 Manticore 后搜索会自动恢复。
重启服务器后 Manticore 没有自动启动
执行 systemctl enable manticoresearch 确保设置了开机自启。然后手动启动: systemctl start manticoresearch。
服务器内存不足
Manticore 默认配置适合大多数场景。如果服务器内存紧张(低于 1GB),可以编辑 /etc/manticoresearch/manticore.conf,在 searchd 段中降低线程数:
searchd {
threads = 2
}
修改后重启: systemctl restart manticoresearch
搜索演进路径
MDMS 的搜索系统设计了四个阶段,可以根据数据量逐步升级:
当前阶段: search-index.json 内存全量匹配,适合千篇以内
阶段二: Manticore Search 全文检索,适合万篇以上(本文档所述)
阶段三: SQLite FTS5 全文搜索,零部署单文件方案(规划中)
阶段四: sqlite-vec 向量语义搜索,基于 LLM embedding 的近似最近邻搜索(远期)