使用 Meilisearch 来代替 Elasticsearch
时间:2026-3-26 00:26 作者:独元殇 分类: 开发相关
其实,现在我更考虑,使用 Meilisearch 来代替 Elasticsearch 。
99%的初创项目死于没流量,而不是死于流量太大把服务器冲垮。我建议创业公司不要搞这些东西,直接买个鸡前后端分离,最多就做一下local first,如果需要回国就上个优化线路。等到真的全球化推广了,你可以最前端的那一小部分上一下Cloudflare。(我们项目就是为了极致的边缘和弹性计算,被折腾来折腾去上线一次又一次的推迟,都是血和泪的实战教训)----- 摘录
大型项目,老老实实使用能分布式、原生分片的 Elasticsearch 。但是小项目,很适合 Meilisearch 。
简介
这个 Meilisearch 是一个使用 Rust 编写的搜索引擎,在 2024 年被广泛使用的。它并不是完全替代 Elasticsearch 的,只是着重优化用户的体验。而且适度很快。
我朋友的项目里,有 20 万份文档(绝大部分是英文的),然后每日 8000 日活用户,之前使用 Elasticsearch 每次查询是 180 毫秒,现在是 12 毫秒!
两者的区别
现在给大家简单说一下 Meilisearch 和 Elasticsearch 的一些区别吧,简单说说。
1. 索引位置
Meilisearch 的搜索索引是储存在 内存 里的,在查询上,是不涉及磁盘IO动作的。但是这也意味着你的索引大小就这么被死死限制住了。
2. 查询
Meilisearch 在查询时,也是允许容错的,有个距离叫【莱文斯坦距离】,大约是 5~8 个单词,这个 Meilisearch 在这里距离是里默认允许 1 个拼写错误,然后根据这个距离递增。当然,这个是写死的!不可配置!我感觉这是个经过深思熟虑后的一个产品决策,还是很正确的。
3. 排名
它的排名,是完全基于数学,里面没有 LLM 的东西,完全按照匹配词语、模糊匹配、精确匹配、词语间隔距离、属性等等作为依据来匹配的。这样,它的速度会很快,而且很多时候还能产生更好的结果。
超简单安装部署方式
它的安装,非常简单(linux),默认运行端口是 7700 这个:
curl -L https://install.meilisearch.com | sh
./meilisearch --master-key="your-master-key-here"
需要注意,这个 --master-key 是很重要的,一定要 16 个 UTF-8 的字节的随机字符。如果在生产环境,一定要配置。
之后就是安装 SDK ,比如 JavaScript :
npm install meilisearch
之后,使用相当简单:
import { MeiliSearch } from "meilisearch";
const client = new MeiliSearch({
host: "http://localhost:7700",
apiKey: "your-master-key", // 你的秘钥
});
const index = client.index("recipes"); // 创建查询表
const task = await index.addDocuments(recipes); // 你需要检索的文档数据
await client.waitForTask(task.taskUid); // 异步等待索引完成
console.log("Indexed", recipes.length, "documents"); // 完成喽 ~
// 这是搜索业务代码
const results = await index.search("carbonara"); // 搜索 carbonara (异步)
console.log(results.hits); // 结果在此!
响应包含hits(匹配的文档)、query(原始查询字符串)、processingTimeMs(引擎端延迟)、limit、offset和estimatedTotalHits。最后一个字段是估算值而非精确计数,因为要保证性能。
很简单,这就是全部的部署和初步使用了!
更具体的使用,可以去他们官网查询。反正 Elasticsearch 大部分有的,它都有。但是查询速度相较于 Elasticsearch 要快很多很多。
不完美
当然,也并不是完美。
- Meilisearch 没有类似 SQL 的完整查询功能。
- 因为索引放到了内存里,所以内存的大小很关键。
- 如果你不是大型互联网公司,日活、并发很高,那 Meilisearch 还好吧。它是单进程设计的,没有分布式,没有分片,只用于中小型互联网公司。日活 十万 是没有问题的。
- 现在倒是有混合搜索,但 向量搜索 还不太行。
使用 Meilisearch 的理由,是因为这个简单。10 分钟就能搞完,但是 Elasticsearch 依然是生产环境级别的老大,全球的搜索市场,半壁江山,稳定性毋庸置疑。
而 Meilisearch 是因为,我们很多产品,一共就几万条数据,半天都不来个人看,那使用 Elasticsearch 有点浪费了哈。
在开发互联网产品时,使用 Meilisearch 作为起点还是可以的,反正 API 都差不多,等用户量大了,或者文档数上亿级别了,迁移到其他更专业的工具时,会方便很多。
参考资料:
标签: 原创 Meilisearch Elasticsearch