2026 Meilisearch 自建全文搜索引擎:Docker 部署打造个人搜索服务

2038 字
10 分钟
2026 Meilisearch 自建全文搜索引擎:Docker 部署打造个人搜索服务

你的网站需要一个站内搜索功能?Elasticsearch 功能强大但资源占用感人——光 JVM 堆内存就要吃掉 1GB 起步。用 Algolia 吧,免费版只有 10000 条记录,超了就得每月 $50 起。Google Custom Search 倒是免费,但你的用户每搜索一次就给 Google 贡献一条数据,隐私堪忧。

Meilisearch 就是来解决这些痛点的。它是一个用 Rust 编写的开源全文搜索引擎,以极低的资源消耗提供毫秒级的搜索体验,支持中文分词、Typo 容错、Faceted 过滤、地理搜索,甚至内置了 AI 混合搜索能力。GitHub 上 58.2k Star 就是它实力的最好证明。

而且 Rust 写的东西有个天然优势:无 GC、内存安全、极致性能。Meilisearch 在 512MB 内存的 VPS 上就能跑得很舒服,一个 Docker Compose 文件搞定部署。


一、Meilisearch vs 其他搜索方案#

对比项MeilisearchElasticsearchAlgoliaGoogle Custom Search
语言RustJava商业闭源商业闭源
价格免费开源(MIT)免费开源(SSPL)免费额度后 $0.50/千次免费 100 次/天,$5/千次
内存占用~100MB 起步~1GB 起步(需 JVM)托管无需关心托管无需关心
部署方式Docker / 单二进制Docker / 集群SaaSSaaS
中文分词✅ 内置❌ 需插件
Typo 容错✅ 默认开启❌ 需配置
AI 混合搜索✅ 支持✅ 需插件
自建可控✅ 完全可控✅ 完全可控❌ 数据在第三方❌ 数据在 Google

简单结论:如果你想要轻量、开箱即用、自己可控的站内搜索,Meilisearch 是最优解。 Elasticsearch 适合大规模日志分析场景,Algolia 适合不想运维的团队。


二、Docker Compose 一键部署#

Meilisearch 的官方 Docker 镜像 getmeili/meilisearch 只有几十 MB,配置非常简单。

docker-compose.yml#

version: '3.8'
services:
meilisearch:
image: getmeili/meilisearch:v1.48
container_name: meilisearch
restart: unless-stopped
ports:
- "7700:7700"
environment:
- MEILI_MASTER_KEY=你的主密钥请改成随机字符串
- MEILI_ENV=production
- MEILI_NO_ANALYTICS=true
volumes:
- ./meili_data:/meili_data

启动#

Terminal window
# 创建数据目录
mkdir -p ./meili_data
# 启动容器
docker compose up -d
# 检查日志
docker compose logs -f meilisearch

启动后访问 http://你的服务器IP:7700,你应该能看到 Meilisearch 的 API 欢迎页面。

安全提示MEILI_MASTER_KEY 请务必生成一个强随机字符串。可以用 openssl rand -base64 32 生成。没有设置 master key 时搜索 API 是公开的,任何人只要知道你的服务器地址就能搜索甚至修改数据。


三、配置详解#

3.1 主密钥(Master Key)#

Master Key 是 Meilisearch 的安全基石。设置后:

  • 默认所有 API 都需要鉴权
  • 可以通过 Master Key 生成不同权限的 API Key(搜索专用、管理专用等)
  • 未设置时运行在 “公开模式”,任何人都可以读写
environment:
- MEILI_MASTER_KEY=your-super-secure-master-key

3.2 中文分词#

Meilisearch v1.x 版本已经内置了 中文分词支持(基于 Charabia 库),无需额外配置。你只需要创建索引时设置好语言:

Terminal window
# 创建索引时指定中文
curl -X POST 'http://localhost:7700/indexes' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"uid": "articles",
"primaryKey": "id"
}'
# 设置中文分词
curl -PATCH 'http://localhost:7700/indexes/articles/settings' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"localizedAttributes": [{"locales": ["zh"], "attributePatterns": ["title", "content"]}]
}'

中文搜索效果实测:搜索”手机”能匹配到”智能手机”、“手机壳”、“手机维修”等内容,分词准确率很高。

3.3 搜索设置优化#

Meilisearch 提供了丰富的搜索设置,可以通过 API 配置:

Terminal window
# 设置可搜索属性
curl -XPATCH 'http://localhost:7700/indexes/articles/settings' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"searchableAttributes": ["title", "description", "content"],
"filterableAttributes": ["category", "tags", "date"],
"sortableAttributes": ["date", "title"],
"rankingRules": ["words", "typo", "proximity", "attribute", "sort", "exactness"]
}'

3.4 AI 混合搜索(v1.8+)#

Meilisearch v1.8 版本之后引入了 AI 混合搜索能力。要启用,需要配置一个嵌入模型:

environment:
- MEILI_EXPERIMENTAL_ENABLE_VECTOR_SEARCH=true
# 可选:使用本地嵌入模型(无需外部 API)
- MEILI_EMBEDDER_SOURCE=hugging-face
- MEILI_EMBEDDER_MODEL=all-MiniLM-L6-v2

启用后,搜索结果会自动结合文本匹配和语义相似度,用户体验提升明显。


四、添加数据与搜索#

4.1 导入数据#

Meilisearch 支持 JSON 格式的批量导入:

Terminal window
curl -X POST 'http://localhost:7700/indexes/articles/documents' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{"id": 1, "title": "Go 泛型入门", "content": "Go 1.18 引入了泛型...", "date": "2026-06-20", "tags": ["go", "编程"]},
{"id": 2, "title": "Docker 容器化部署", "content": "Docker 让应用部署变得简单...", "date": "2026-06-19", "tags": ["docker", "部署"]},
{"id": 3, "title": "Rust 生命周期详解", "content": "生命周期是 Rust 最核心的概念之一...", "date": "2026-06-18", "tags": ["rust", "编程"]}
]'

4.2 搜索查询#

搜索 API 超级简单:

Terminal window
# 基本搜索
curl 'http://localhost:7700/indexes/articles/search' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "docker 部署", "limit": 10}'
# 带过滤条件的搜索
curl 'http://localhost:7700/indexes/articles/search' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "泛型", "filter": "date > 2026-06-01", "sort": ["date:desc"]}'

返回结果通常只需 几毫秒到十几毫秒,即使是几十万条数据的索引也是秒级的响应。

4.3 前端集成#

Meilisearch 提供了官方 SDK,覆盖几乎所有主流语言:

语言SDK 包名安装方式
JavaScriptmeilisearchnpm install meilisearch
Pythonmeilisearchpip install meilisearch
Gomeilisearch-gogo get github.com/meilisearch/meilisearch-go
Rustmeilisearch-sdkcargo add meilisearch-sdk
Rubymeilisearch-railsgem install meilisearch-rails
PHPmeilisearch-phpcomposer require meilisearch/meilisearch-php

前端集成示例(JavaScript):

import { MeiliSearch } from 'meilisearch'
const client = new MeiliSearch({
host: 'http://localhost:7700',
apiKey: 'YOUR_SEARCH_API_KEY'
})
const index = client.index('articles')
const results = await index.search('docker 部署', {
limit: 20,
attributesToHighlight: ['title', 'content']
})
console.log(results.hits)

五、备份与恢复#

Meilisearch 提供了两种备份机制:

5.1 Dumps(跨版本迁移)#

Dump 是 Meilisearch 在不同版本之间导入/导出的推荐方式:

Terminal window
# 触发 Dump(API)
curl -X POST 'http://localhost:7700/dumps' \
-H "Authorization: Bearer YOUR_MASTER_KEY"
# Dump 文件保存在 /meili_data/dumps/ 目录下
# 恢复:启动时挂载 dump 文件
docker compose down
# 删除 meili_data/data.ms (老数据)
rm -rf ./meili_data/data.ms
# 重启时指定 dump 文件
docker compose run --rm meilisearch \
--import-dump /meili_data/dumps/你的dump文件.dump
docker compose up -d

5.2 Snapshots(同版本快速恢复)#

environment:
- MEILI_SNAPSHOT_INTERVAL_SECONDS=86400 # 每天自动快照

快照保存在 /meili_data/snapshots/ 目录,恢复时直接替换 data.ms 目录即可。


六、搭配反向代理#

和自建服务系列的其他文章一样,建议用 Caddy 或 NPM 给 Meilisearch 加一层 HTTPS 反代

search.你的域名.com {
reverse_proxy meilisearch:7700
}

别忘了在 docker-compose.yml 中把 Meilisearch 加入反代的网络,并且不需要对外暴露 7700 端口(仅内部访问):

services:
meilisearch:
# ... 配置同上
networks:
- internal
# 移除 ports 暴露(仅通过反代访问)
caddy:
# ... Caddy 配置
networks:
- internal
networks:
internal:
driver: bridge

FAQ#

Q: Meilisearch 免费版有什么限制? A: Meilisearch 是开源软件,社区版(MIT 协议)没有任何功能限制。企业版(商业许可)提供额外功能如更多嵌入模型支持。对于个人自建来说,社区版完全够用。

Q: 内存占用到底多少? A: 空载约 50-80MB,索引几万条数据后约 150-300MB。相比 Elasticsearch 动辄 1GB+ 的 JVM 堆内存,轻了一个数量级。

Q: 支持多少条数据? A: 社区版没有硬限制,百万级数据毫无压力。实测 50 万条文章数据,搜索响应时间仍在 50ms 以内。

Q: 中文搜索效果怎么样? A: 内置 Charabia 分词器对中文支持良好,常见场景下不需要额外配置。如果需要更精准的分词,可以配置自定义分词规则。

Q: 可以和 Elasticsearch 共存吗? A: 完全可以。很多团队的架构是:Elasticsearch 负责日志分析,Meilisearch 负责前端站内搜索。两个场景不冲突。

Q: 升级版本要注意什么? A: 建议先做 Dump 备份。跨主要版本升级时(如 v1.0 → v1.1),用 Dump 恢复最安全。小版本升级直接换镜像标签重启即可。

Q: Docker 部署要开放哪些端口? A: 默认只需 7700。如果通过反代访问,你甚至不需要暴露 7700 端口,完全通过内部 Docker 网络通信。

延伸阅读#


Meilisearch 是目前自建搜索的最优选择之一,Rust 的极致性能让它成为站内搜索的首选。下一篇我们来聊聊另一个 Go 写的实用项目 —— Listmonk 自建邮件营销平台。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
2026 Meilisearch 自建全文搜索引擎:Docker 部署打造个人搜索服务
https://www.kshare.top/posts/2026-meilisearch-自建全文搜索引擎docker-部署打造个人搜索服务/
作者
Kshare
发布于
2026-06-22
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
站点已开启广告(类型:弹窗广告),给您带来的不便敬请谅解。如有更好的广告建议,欢迎发送邮件至 t9uzrz6u@anonaddy.me,感谢您的支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
187
分类
9
标签
190
总字数
490,175
运行时长
0
最后活动
0 天前

文章目录