最近在开发一个小型应用,里面要用到搜索相关的中间件,本来计划打算用es,但考虑到本身应用程序不大,用es有点杀鸡用牛刀的感觉,于是在网上搜了一下,找到了一个“美丽”的搜索引擎-Meilisearch。
一、介绍
MeiliSearch是轻量级的开源搜索引擎,专注于即时搜索和易用性,适合需要快速上手的项目。它的自动补全、纠错功能不错,但分布式架构支持较弱,可能不适合大数据量。相比于Elasticsearch作为老牌搜索引擎,功能全面,支持复杂的查询和大规模分布式部署,但学习曲线陡峭,维护成本高。
Meilisearch VS ES
对比维度 | MeiliSearch | Elasticsearch |
---|---|---|
定位 | 轻量级即时搜索引擎 | 企业级分布式搜索分析引擎 |
典型应用场景 | 电商搜索、应用内搜索、中小型数据集 | 日志分析、大数据搜索、复杂分析 |
部署复杂度 | 单节点部署简单(<1分钟) | 需要集群配置,部署复杂 |
默认分词支持 | 中文需自定义 | 内置多语言分词(包括中文) |
搜索延迟 | 通常 <50ms | 10ms-500ms(取决于集群规模) |
数据规模上限 | 推荐 <10M 文档 | PB级数据支持 |
高可用方案 | 无原生支持 | 原生分片+副本机制 |
学习曲线 | 简单(REST API+SDK) | 陡峭(需掌握DSL、集群管理等) |
社区生态 | 新兴社区(GitHub 38k stars) | 成熟生态(GitHub 64k stars) |
运维成本 | 几乎无需维护 | 需要专业运维团队 |
二、安装与运行
1. 快速安装
# 安装最新版
curl -L https://install.meilisearch.com | sh
备注:支持 Linux/macOS,Windows 需通过 WSL 运行
2. 启动服务
# 带主密钥启动
./meilisearch --master-key="your_master_key_here"
注意:主密钥需16字节以上字母数字组合,生产环境必须设置
三、索引管理
1. 创建索引(自动推断)
curl -X POST 'http://localhost:7700/indexes/movies/documents?primaryKey=id' \
-H 'Authorization: Bearer your_master_key' \
-H 'Content-Type: application/json' \
--data-binary @movies.json
特性:自动创建不存在的索引,主键自动推断
2. 删除索引
curl -X DELETE 'http://localhost:7700/indexes/movies' \
-H 'Authorization: Bearer MASTER_KEY'
四、文档操作
1. 批量添加文档
curl -X POST 'http://localhost:7700/indexes/movies/documents' \
-H 'Authorization: Bearer MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary '[{
"id": 1,
"title": "Inception",
"genre": "Sci-Fi"
},{
"id": 2,
"title": "The Dark Knight",
"genre": "Action"
}]'
支持格式:JSON/CSV/NDJSON
2. 更新单个文档
curl -X PUT 'http://localhost:7700/indexes/movies/documents' \
-H 'Authorization: Bearer MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"id": 1,
"title": "Inception (2010)"
}'
3. 删除文档
# 按ID删除
curl -X DELETE 'http://localhost:7700/indexes/movies/documents/1' \
-H 'Authorization: Bearer MASTER_KEY'
# 批量删除
curl -X POST 'http://localhost:7700/indexes/movies/documents/delete-batch' \
-H 'Authorization: Bearer MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary '[1, 2, 3]'
五、搜索操作
1. 基础搜索
curl -X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Authorization: Bearer MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "dark",
"limit": 10
}'
2. 分面搜索
curl -X POST 'http://localhost:7700/indexes/movies/search' \
-H 'Authorization: Bearer MASTER_KEY' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "knight",
"facets": ["genre"]
}'
3. 分页参数
# 每页100条,跳过前200条
curl -X GET 'http://localhost:7700/indexes/movies/documents?limit=100&offset=200' \
-H 'Authorization: Bearer MASTER_KEY'
## 五、任务管理
### 1. 查询任务状态
```bash
curl -X GET 'http://localhost:7700/tasks/0' \
-H 'Authorization: Bearer your_master_key'
典型成功响应:
{
"status": "succeeded",
"details": {
"receivedDocuments": 19547,
"indexedDocuments": 19547
}
}
六、安全建议
生产环境必须
- 设置
--master-key
启动参数 - 使用 HTTPS
- 定期备份
/data.ms
目录
权限分离
# 生成只读搜索密钥
curl -X POST 'http://localhost:7700/keys' \
-H 'Authorization: Bearer your_master_key' \
-d '{
"actions": ["search"],
"indexes": ["*"],
"expiresAt": "2024-12-31"
}'
操作流程图
sequenceDiagram
participant 用户
participant MeiliSearch
用户->>MeiliSearch: 1. 安装并启动服务
用户->>MeiliSearch: 2. 导入数据(异步)
MeiliSearch-->>用户: 返回taskUid
用户->>MeiliSearch: 3. 查询任务状态
MeiliSearch-->>用户: 返回处理结果
用户->>MeiliSearch: 4. 执行搜索
MeiliSearch-->>用户: 返回搜索结果
注意事项
- 异步操作:所有写入操作返回
taskUid
,需通过任务接口确认完成状态 - 分页限制:
limit
参数最大值1000,超过需多次请求 - 压缩传输:大数据量建议使用
Content-Encoding: gzip
- 版本兼容:v0.25+ 使用
Authorization: Bearer
头,旧版使用X-Meili-API-Key
完整文档参考:https://meilisearch.org.cn/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch
完整API参考:https://meilisearch.org.cn/docs/reference/api/overview
评论区