像开箱即用一样简单:Meilisearch全文搜索引擎实战入门

前言

在各类项目开发中,搜索始终是用户体验的核心功能之一。无论是个人博客、产品官网、文档知识库,还是企业后台、内容管理系统,用户都依赖搜索快速定位自己需要的信息。但实际开发里,很多人的搜索方案都比较将就:要么直接用数据库模糊查询,要么硬上Elasticsearch,结果要么搜索体验拉胯,要么运维成本居高不下。不少中小项目其实只需要一个够用、稳定、速度不错的全文检索,却被迫去维护一套复杂笨重的服务,这也是很多开发者真实遇到的难题。

Elasticsearch的能力毋庸置疑,生态完善,海量数据场景下表现很强。但大多数普通项目根本用不到它全部能力,反而要承受资源占用高、配置繁琐、学习成本高的问题。只是为了实现简单的全文检索、关键词高亮,就要花大量时间调参、处理集群问题,对小团队和个人开发者来说,实在有点得不偿失。

数据库 LIKE 查询的坑也很现实。少量数据时还能跑,数据一多查询就明显变慢。而且原生数据库没有分词、拼写纠错、结果权重排序这些能力。用户打错字、简写关键词,就搜不到任何结果。想要改善体验,就得自己写一堆逻辑去实现分词和排序,工作量大,效果还很难做好。

这种场景下,Meilisearch就是一个很合适的选择。使用Rust编写,轻量稳定,主打开箱即用。不用复杂配置,不用额外插件,自带错别字容错、中文分词、搜索高亮、多字段排序这些常用能力。单二进制文件就能启动,API简洁,任何编程语言都能快速接入,百万级数据也能做到毫秒级返回。

本文主打实战,不会堆砌晦涩理论。我们从部署启动开始,一步步完成索引创建、数据导入、检索调用,带你完整跑通Meilisearch,快速给你的业务接入一套好用、高速的全文搜索。

image-20260911175255417

1.Meilisearch是什么?

Meilisearch是一款开源轻量的全文搜索引擎,使用 Rust 语言开发,用来给网站、文档、后台系统快速增加搜索能力,替代笨重的Elasticsearch,跨平台支持Windows、Linux、macOS、NAS,自带简洁的HTTP API。

核心特点

  1. 开箱即用,配置极少,不需要复杂调参,不用额外安装分词插件,部署完成就能直接导入数据开始检索。
  2. 自带智能搜索能力:内置错别字容错、中文分词、关键词高亮、自定义排序、结果过滤,这是它最亮眼的优势。
  3. 性能优秀、资源占用低,百万级文档也能做到毫秒级返回搜索结果,适合小主机、NAS长期稳定运行。
  4. 简单的HTTP API,几乎所有编程语言都能快速对接,上手门槛很低。

Meilisearch核心能力

  • 全文检索,多字段同时搜索
  • 拼写纠错,用户打错字也能匹配结果
  • 搜索关键词高亮展示
  • 自定义排序、过滤、分页
  • 支持设置字段权重,优先展示更相关内容

适合什么人使用

  • 个人开发者:博客、文档站、个人项目想快速加搜索,不想折腾复杂服务
  • 中小团队:内部知识库、后台管理系统、中小型商城,需要低成本实现优质搜索体验
  • NAS / 低功耗主机玩家:在本地小设备上部署轻量搜索服务,资源消耗小
  • 不想维护Elasticsearch的开发人员:需要全文检索能力,但希望降低部署和运维成本

Meilisearch和Elasticsearch的关系

  • Meilisearch:轻量搜索引擎,主打简单易用,适合中小项目、文档站、内部系统。
  • Elasticsearch:重型搜索引擎,功能极其丰富,适合海量数据、复杂检索场景,但是部署维护成本高。

2.前提条件

2.1ssh远程连接到极空间

  • 开启【SSH 服务】
  • 使用终端(Windows PowerShell / Mac Terminal)登录:
ssh root@IP

没有ssh的小伙伴可以参考这篇文章:

连接成功:极空间别再吃灰了!开启SSH,秒变全能服务器! – cpolar 极点云官网

image-20260522154032880

2.2验证docker是否开启

使用命令:

docker -v
systemctl status -v

没有docker的小伙伴可以参考这篇文章:极空间开箱实录:从拆箱到远程访问保姆级教程,30分钟上手! – cpolar 极点云官网

image-20251017103712618

3.安装Meilisearch

3.1 命令行终端

下载并安装Meilisearch。此命令会将最新版本的Meilisearch安装到您的本地机器上:

curl -L https://install.meilisearch.com | sh

接下来,在您的终端中运行以下命令以启动Meilisearch:

./meilisearch --master-key="aSampleMasterKey"

3.2 docker一键部署

下载docker镜像:

docker pull getmeili/meilisearch:latest

image-20260911170936696

运行meilisearch容器:

image-20260911171001073

部署完成后,在浏览器中输入 http://极空间IP:7700 就能看到Meilisearch的界面:

8f422b305c0f958543ad2598e988bbec

4.使用Meilisearch

4.1 创建索引

字段含义

  • uid:索引唯一标识,索引名称,这里就是movies,一旦创建不能修改。
  • createdAt:索引创建的时间(UTC 时间)
  • updatedAt:索引最后一次更新时间,新增 / 修改文档、修改索引配置都会更新这个值
  • primaryKey:主键字段名称,本例为id,用来唯一区分每一条文档
curl \
-X POST 'http://localhost:7700/indexes' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "uid": "movies",
  "primaryKey": "id"
}'

image-20260911172909493

查看单个索引详情(查看这个 JSON 的命令)

curl \
-H 'Authorization: Bearer aSampleMasterKey' \
'http://localhost:7700/indexes/movies'

image-20260911173051889

查看全部索引列表

curl \
-H 'Authorization: Bearer aSampleMasterKey' \
'http://localhost:7700/indexes'

image-20260911173135614

导入成功:

image-20260911173208010

4.2 导入文档

方法1:直接在命令行内写入 JSON 数据(推荐快速测试,无需新建文件)

添加文档 通过curl调用Meilisearch的API,往movies这个索引里写入两条电影数据。primaryKey=id指定用id字段作为每条数据的唯一标识。

curl \
-X POST 'http://localhost:7700/indexes/movies/documents?primaryKey=id' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '[
  {"id":1,"title":"星际穿越","overview":"科幻大片"},
  {"id":2,"title":"盗梦空间","overview":"诺兰经典电影"}
]'

image-20260911171916312

方法 2:创建movies.json文件,再导入(适合大批量导入)

新建文件:

创建本地JSON数据文件 cat > 是 Linux 命令,在当前目录新建movies.json文件,并把电影JSON内容写入保存。后续可以把大量业务数据放到这个文件,适合大批量导入。

cat > movies.json <<EOF
[
  {"id":1,"title":"星际穿越","overview":"科幻大片"},
  {"id":2,"title":"盗梦空间","overview":"诺兰经典电影"}
]
EOF

执行导入命令:

读取本地movies.json文件,批量导入文档 --data-binary @movies.json 就是读取刚才新建的本地文件,上传给Meilisearch。同样返回任务入队成功。

curl \
>   -X POST 'http://localhost:7700/indexes/movies/documents?primaryKey=id' \
>   -H 'Content-Type: application/json' \
>   -H 'Authorization: Bearer aSampleMasterKey' \
>   --data-binary @movies.json
{"taskUid":4,"indexUid":"movies","status":"enqueued","type":"documentAdditionOrUpdate","enqueuedAt":"2026-09-11T09:14:36.952700249Z"}

image-20260911171926877

查看任务是否执行完成:

curl \
  -H 'Authorization: Bearer aSampleMasterKey' \
  'http://localhost:7700/tasks/3'

image-20260911172053709

统计信息成功~

image-20260911171959746

测试命令:

curl \
  -X POST 'http://localhost:7700/indexes/movies/search' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer aSampleMasterKey' \
  -d '{ "q": "星际" }'

image-20260911172340786

4.3 搜索数据

基础搜索命令

curl \
-X POST 'http://localhost:7700/indexes/books/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "q": "三体"
}'

image-20260911173533399

常用进阶搜索示例

示例 1:只返回指定字段(只展示书名和作者,不返回年份分类)

curl \
-X POST 'http://localhost:7700/indexes/books/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "q": "科幻",
  "attributesToRetrieve": ["title", "author"]
}'

image-20260911173713413

示例 2:分页搜索,只取前 2 条结果

curl \
-X POST 'http://localhost:7700/indexes/books/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "q": "计算机",
  "limit": 2
}'

image-20260911173733138

示例 3:组合过滤,搜索科幻类书籍,并且年份大于 2000

curl \
-X POST 'http://localhost:7700/indexes/books/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "q": "科幻",
  "filter": "year > 2000"
}'

image-20260911173757778

示例 4:错别字容错测试(输入错别字,依然能搜到三体)

curl \
-X POST 'http://localhost:7700/indexes/books/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer aSampleMasterKey' \
-d '{
  "q": "三提"
}'

image-20260911173819123

返回结果字段简单解读

{
  "hits": [
    {"id":1,"title":"三体","author":"刘慈欣","category":"科幻","year":2008},
    ...
  ],
  "query": "三体",
  "processingTimeMs": 0,
  "estimatedTotalHits": 3
}
  • hits:搜索命中的数据数组,就是搜索结果列表
  • query:你输入的搜索关键词
  • processingTimeMs:检索耗时,一般都是毫秒级
  • estimatedTotalHits:预估匹配到的文档总数

在网页版,输入关键词,即可搜索到:

image-20260911172302725

本地部署的Meilisearch自带Web管理面板与搜索API,但默认只能局域网访问;搭配cpolar内网穿透,无需公网IP、不用改路由器,一行命令就能创建加密隧道,把7700端口的Meilisearch服务映射为公网可访问地址,随时随地远程打开Web界面查看movies、books索引,调用API测试全文检索、错别字纠错、筛选排序等搜索能力,适合开发调试、异地演示搜索功能;注意生产环境务必做好密钥防护,不要直接裸暴露公网。

5.安装cpolar实现随时随地开发

5.1 什么是cpolar?

cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。

5.2 部署cpolar

cpolar可以将你本地电脑中的服务(如SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

官网在此:https://www.cpolar.com

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

image-20250725104019896

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar

22e5adfaf290a17fc3384bb296055259

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

8a6698b1bf26d64ba3645827fbfb1c29

6.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:Meilisearch,注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:7700
  • 域名类型:随机域名
  • 地区:选择China Top

image-20260911174922951

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

image-20260911174935497

访问成功。

image-20260911174949814

7.保留固定公网地址

使用cpolar为其配置二级子域名(cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站),该地址为固定地址,不会随机变化。

image-20250918151358733

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我使用的是Meilisearch,大家可以自定义。填写备注信息,点击保留。

image-20260911175056635

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。

image-20260911175116715

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

image-20260911175149064

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20260911175228009

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

image-20260911175244541

总结

本文带我们从零上手Meilisearch轻量全文检索引擎,从基础概念到完整实操。先理解索引如同数据库数据表,用来归类存放同类文档,文档就是一条条业务数据;我们亲手创建movies电影索引、books图书索引,导入多组测试数据,利用内置Web可视化面板直观查看数据。

Meilisearch开箱即用,原生支持中文检索,自带拼写纠错、相关度排序,还能实现字段权重配置、关键词检索、条件过滤、分页、分面搜索等高级能力。它一次搜索只能查询单个索引,跨类型检索可以采用多次请求后端合并结果的方案。

本地部署的Meilisearch默认仅局域网访问,搭配cpolar内网穿透,不用公网IP,一键把7700端口服务暴露到公网,随时随地远程访问Web面板、调用搜索API,非常适合开发演示。实操中需要留意系统磁盘空间,Z4S这类小系统盘设备不要把下载文件、大容量ISO镜像放在系统分区,否则会出现磁盘占满、cpolar配置写入失败等故障;同时公网暴露时务必保护好Master密钥,避免数据安全风险。

整套流程门槛低,不用复杂的分词配置,适合个人站点、知识库、后台业务检索场景快速落地全文搜索。

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站

Share:

发表回复

目录

On Key

推荐文章