应用里的搜索框,代码通常是这样写的:WHERE title LIKE '%关键词%'。

小数据量的时候没问题,数据一多就慢,而且搜不准——用户打错一个字,就什么都搜不到。中文还有个额外的问题:分词。

Meilisearch 就是为了替掉这几行 SQL 而存在的。

Meilisearch:给应用装一个毫秒级搜索

LIKE 查询的尽头

自建搜索的常见演进路径:

起步阶段,LIKE '%xx%' 够用,数据也就几千条。

增长阶段,数据到几十万,查询开始变慢,加索引也只是缓解。

瓶颈阶段,用户抱怨搜不到、搜不准、联想慢,你开始考虑要不要上 Elasticsearch。

问题是 Elasticsearch 的学习曲线和运维成本都不低——概念多、要调优、中文还得单独装分词插件。对一个中小型应用来说,这个投入可能过重。

Meilisearch 的优势

Meilisearch 的优势

毫秒级响应。 官方基准测试显示,即使在千万级文档规模上仍是毫秒返回,前端做即时联想完全没问题。

容错搜索。 打错字、少字母、顺序不对也能命中。对用户来说,这比"精确匹配"友好太多。

中文分词内置可用。 不需要额外搭一套分词服务,开箱就能处理中文内容。

排序与过滤灵活。 自定义排序规则、分面过滤、按字段加权,前端可以直接调参数。

部署简单。 单个二进制或一个 Docker 容器,一条命令就能跑起来。

和 Elasticsearch 怎么选

Meilisearch vs Elasticsearch

Meilisearch Elasticsearch
上手难度 低,API 直观 高,概念多
资源占用 小,单机可跑 大,需调优
中文支持 内置可用 需装分词插件
适用规模 中小型应用搜索 大规模日志/检索
运维成本 低 高

简单说:你的场景是"应用内搜索",选 Meilisearch;是"日志分析 / 海量检索",选 Elasticsearch。

前者追求的是开发者体验和响应速度,后者追求的是吞吐量和分析能力,方向不同。

接入流程

接入三步

  1. 起服务 — docker run 一条命令,或下载二进制直接执行
  2. 建索引灌数据 — 通过 REST API 推 JSON 文档,索引自动建立,不需要预先定义 schema
  3. 前端接搜索框 — 调用 /search 接口,配合前端库做即时联想和结果高亮

一点提醒

Meilisearch 是搜索引擎,不是数据库。它是作为你现有数据库的补充存在的:

  • 数据源仍然是你的主库,Meilisearch 里放的是为搜索优化的副本
  • 需要自己处理数据同步(写入主库后同步推送到 Meilisearch)
  • 它不做事务、不做复杂关联查询

理解这一点,就不会用错。把它当作应用旁边的一个专门负责"让用户快速找到东西"的组件,它的表现会非常称职。

项目地址: https://github.com/meilisearch/meilisearch