侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

小而“美”的搜索引擎

NewBoy
2024-07-22 / 0 评论 / 0 点赞 / 17 阅读 / 0 字

最近在开发一个小型应用,里面要用到搜索相关的中间件,本来计划打算用es,但考虑到本身应用程序不大,用es有点杀鸡用牛刀的感觉,于是在网上搜了一下,找到了一个“美丽”的搜索引擎-Meilisearch。

一、介绍

MeiliSearch是轻量级的开源搜索引擎,专注于即时搜索和易用性,适合需要快速上手的项目。它的自动补全、纠错功能不错,但分布式架构支持较弱,可能不适合大数据量。相比于Elasticsearch作为老牌搜索引擎,功能全面,支持复杂的查询和大规模分布式部署,但学习曲线陡峭,维护成本高。

Meilisearch VS ES

对比维度MeiliSearchElasticsearch
定位轻量级即时搜索引擎企业级分布式搜索分析引擎
典型应用场景电商搜索、应用内搜索、中小型数据集日志分析、大数据搜索、复杂分析
部署复杂度单节点部署简单(<1分钟)需要集群配置,部署复杂
默认分词支持中文需自定义内置多语言分词(包括中文)
搜索延迟通常 <50ms10ms-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-->>用户: 返回搜索结果

注意事项

  1. 异步操作:所有写入操作返回taskUid,需通过任务接口确认完成状态
  2. 分页限制limit 参数最大值1000,超过需多次请求
  3. 压缩传输:大数据量建议使用Content-Encoding: gzip
  4. 版本兼容: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

0

评论区