2026 实测:5 美元小机用 Meilisearch 搭站内搜索,比 Typesense 省在哪
2026-08-16 · DevCraft Studio
手把手在 1 GB 内存的便宜 VPS 上用 Docker 跑通 Meilisearch,给博客加毫秒级全文搜索,自带中文分词和 typo 容错。顺便说清它和 Typesense 在内存、授权、中文支持上的真实差异,照抄 docker-compose 就能跑。
延伸阅读
更多相关攻略推荐:2026 独立站 PCI-DSS 自查清单:SAQ A 还是 A-E、2026 只选月付 VPS:不锁年付、随时退的试错策略、2026 海外仓/ERP 系统自建部署:独立服务器还是云 VPS?、2026 实测:VPS 上自托管 AI 编程助手——Continue、【知识库自托管 02】2026 实测:VPS 自托管 Anythin。
写在前面:为什么不在博客里直接塞个 Algolia
很多站长给网站加搜索,第一反应是接 Algolia。确实好用,但只要你稍微有点流量,账单就开始不好看了。Algolia 按搜索次数和文档数收费,一个小博客一年下来可能比 VPS 还贵。更别提数据都在别人服务器上,想导出自家内容还得求人。我自己的博客才三万多篇文章,与其每月给 SaaS 交钱,不如花五美元买台小机自己跑一个开源搜索引擎。今天要聊的 Meilisearch,就是 2026 年我依然最推荐的自托管搜索方案。
算笔账就清楚了:Algolia 的免费层只有一万条记录和每月一万次搜索,稍微像样的站点一天就能用完;再往上就是按月订阅,搜索量和文档量一涨,每月几十到上百美元很常见。而一台 RackNerd 或 Cloudcone 的五美元机,一年也就五六十美元,还是终身属于你、想怎么折腾怎么折腾。对中文站长尤其划算——你既省了订阅费,又不用把读者搜索词这种敏感行为数据交给第三方。如果你只是想给博客、文档站、产品页加个能用的搜索框,自托管几乎是零成本的最优解。
Meilisearch 到底是什么,凭什么 2026 年还是自托管首选
Meilisearch 是一个用 Rust 写的开源搜索引擎,社区版走 MIT 许可,GitHub 上已经 50k+ stars。它最打动我的是三件事:第一,开箱即用的相关性排序,基本不用调参;第二,内置 typo tolerance(错别字容忍),用户打错字也能搜到;第三,对中文、日文、韩文这类没空格的语言有专门优化的分词,不用像 Elasticsearch 那样自己配 IK 分词器。2026 年它还补齐了原生向量检索和混合检索,赶上 RAG 的热度,想给站点做"语义搜索 + 关键词"混合召回也能直接上。
和 Typesense 比,Meilisearch 的存储架构是基于磁盘的内存映射(LMDB),索引可以比内存大得多;而 Typesense 把整个索引塞进内存。这意味着同样是 1 GB 的小机,Meilisearch 能扛的文档量远超 Typesense。再加上 MIT 比 Typesense 的 GPL-3 更友好,商用嵌入不怕 copyleft 纠纷,我个人给小站选它毫无悬念。
还有一点中文用户特别在意的:语言支持。Meilisearch 内置了上百种语言的自动检测,中文、日文、阿拉伯文这些没有空格、词边界模糊的语言都有专门优化的分词器;Typesense 走的是基于 Unicode 的通用切词,对中文这种语言支持弱一截,很多时候得自己额外处理。做中文站你几乎一定会踩到这个差异,所以选 Meilisearch 能少掉很多头发。另外 2026 年 Meilisearch 还内置了对话式搜索和本地向量生成(基于 Rust 的 Candle 框架,无需外部依赖),想做 RAG 也能直接在单机里跑,这也是它持续被社区追捧的原因。
1 GB 小机到底能不能跑:内存、硬盘、CPU 实话实说
先泼盆冷水:网上常有人问"256MB 能不能跑 Meilisearch"。老实说,太紧了。Meilisearch 索引阶段最吃内存,256MB 在灌数据时很容易 OOM。512MB 能勉强跑极小的数据集(几千篇文档),但体验不踏实。真正舒服的起点是 1 GB 内存——这也正好是 RackNerd、Cloudcone 那类五美元年付机型给的配置。Vultr 和 Contabo 的起步款给的更是 1 GB 甚至 2 GB 起,余量更足。
关键要理解内存映射这件事:搜索时只有"正在被查的那部分索引"才会进内存,所以你索引的数据量可以明显超过物理内存。一个几万篇博客的站点,索引也就几百 MB,1 GB 小机完全够用,搜索延迟还能压到毫秒级。硬盘方面务必用 SSD,索引和快照的写入很吃 IO,机械盘会直接成为瓶颈。CPU 一个核心就够,索引阶段多核会更快但不是必须。
- 256MB:不建议,灌数据极易 OOM,只适合纯玩具。
- 512MB:能跑几千篇文档的小站,但余量紧张,不推荐长期生产。
- 1 GB(推荐):五美元机型的甜点配置,几万篇博客稳稳的,搜索毫秒级。
- 硬盘:至少 10 GB SSD,索引体积按数据量三倍预留空间。
用 Docker Compose 五分钟跑起来
最省心的方式就是 Docker。先确保机器装了 Docker 和 docker compose 插件,然后建个目录把配置和数据库分开存。把密钥放到独立的 env 文件里,千万别写进 docker-compose 然后推到 git。下面这份 compose 我自己在 1 GB 机器上跑过,照抄即可。
services: meilisearch: image: getmeili/meilisearch:v1.13 container_name: meilisearch restart: unless-stopped env_file: - ./meili.env volumes: - ./data:/meili_data ports: - "127.0.0.1:7700:7700"再建一个 meili.env,重点是 MEILI_MASTER_KEY 必须是一串随机的 64 位密钥,可以用 openssl rand -hex 32 生成。它相当于管理员密码,丢了别人就能改你数据。
MEILI_ENV=production MEILI_MASTER_KEY=换成你自己的64位随机密钥 MEILI_HTTP_ADDR=0.0.0.0:7700 MEILI_NO_ANALYTICS=true MEILI_DB_PATH=/meili_data/data.ms然后一条命令启动:docker compose up -d。把端口只绑在 127.0.0.1 上,别直接暴露公网;前面套个 Nginx 做 HTTPS 和鉴权才是正经做法。启动后用 curl http://127.0.0.1:7700/health 看到 {"status":"available"} 就说明活了。
灌数据、开中文分词、配置 typo tolerance
建个索引再往里塞文档,用 curl 就行。Meilisearch 对中文是自动检测语言并分词的,你不用配任何额外插件,直接把中文标题和内容丢进去它就能正确切词。下面这个例子建了一个叫 posts 的索引,并灌入一篇中文文章。
curl -X POST 'http://127.0.0.1:7700/indexes/posts/documents' -H "Authorization: Bearer 你的主密钥" -H 'Content-Type: application/json' -d '[{"id":1,"title":"如何在小机上自建搜索","content":"用 Meilisearch 给博客加全文检索"}]'typo tolerance 默认就开着,用户打"自建搜素"这种错字也能召回。你要是想更宽松或更严格,可以调 typoTolerance 里的 minWordSizeForTypos 和 disableOnAttributes。中文搜索的关键其实在字段权重:把 title 放在 searchableAttributes 前面,标题命中会比正文命中排得更靠前,体验立刻不一样。
- 中文分词:零配置,自动按 CJK 切词,比 Typesense 的 Unicode 切词更适合中文。
- 错别字容错:默认开启,可按字段和词长细调。
- 字段排序:searchableAttributes 里靠前的字段权重更高。
- 过滤与分面:配 filterableAttributes 才能按分类、标签过滤。
把搜索框接到你的网站
后端跑起来后,前端最简单的做法是用官方提供的 instant-meilisearch 适配器,配合 React InstantSearch 或 Vue InstantSearch,几行代码就能出一个带高亮、防抖、即搜即得的搜索框。静态博客(Hugo、Hexo、Astro)也可以直接在前端用 @meilisearch/instant-meilisearch 拉一个现成的 UI。
这里有个生死线级别的坑:前端只能放 search key(用 MEILI_MASTER_KEY 派生出的只读密钥),绝对不能把 master key 写进浏览器代码。master key 在前端等于把数据库管理权交给全世界。Meilisearch 的密钥体系是:master key 只在服务端用,search key 和 admin key 由它派生,给前端用 search key 就好。另外生产环境务必走 HTTPS,明文 HTTP 把密钥裸奔出去就前功尽弃了。
备份、升级与几个中文圈常踩的坑
数据得备份。Meilisearch 有快照(snapshot)机制,设 MEILI_SCHEDULE_SNAPSHOT=86400 就能每天自动打一份,存到挂载的 volumes 里,你再定时拷到别处就行。升级版本前一定先打一次快照,新版本一般不向下兼容旧索引格式,回滚就靠它。
监控也很简单,不需要像 Elasticsearch 那样盯着一堆集群指标。你只要看两个东西:内存占用和搜索延迟。小机资源紧,建议给 Meilisearch 设个内存上限,比如 MEILI_MAX_INDEXING_MEMORY 控制在可用内存的三分之二以内,避免索引时把系统内存吃光导致 SSH 都连不上。平时用 docker stats 瞄一眼就行。如果哪天搜索变慢,九成是磁盘 IO 或内存被别的进程挤占,SSD 和独立小机基本能杜绝这类问题。Contabo 那种大硬盘大内存机型更是可以闭眼跑。
- 坑一:把 7700 端口直接暴露公网,没密钥也能被刷爆,记得只绑 127.0.0.1 再走反代。
- 坑二:前端硬编码 master key,等于公开数据库,务必用派生出的 search key。
- 坑三:忘记关 analytics,国内机器连不上官方统计还会拖慢启动,设 MEILI_NO_ANALYTICS=true。
- 坑四:磁盘写满,索引阶段需要约三倍数据量的临时空间,小盘机器最容易在这翻车。
- 坑五:以为 256MB 能跑,结果一灌数据就 OOM,老老实实上 1 GB 机型更省心。
最后说回和 Typesense 的取舍:如果你的数据量就几万到几百万、内存紧、要中文、要 MIT 许可、想省心,Meilisearch 在便宜 VPS 上明显更划算;Typesense 胜在纯内存数据集的极致速度和内置集群高可用,适合已经上规模、要扛高并发的生产搜索服务。给个人博客和小站,Meilisearch 是那个"照抄就能跑"的答案。