搜索中...
🔍

未找到相关结果

Akemi

VibeCoding改造博客使用Meilisearch搜索框—iflow创建搜索框

2026/04/10

k8s部署meilisearch

给公司的公有云部署了一个,挺有意思的,我准备后续给我的博客也用上
官方文档:https://github.com/meilisearch/meilisearch-kubernetes
支持资源清单或helm部署

1
wget https://raw.githubusercontent.com/meilisearch/meilisearch-kubernetes/refs/heads/main/manifests/meilisearch.yaml

几个注意点:

  • 建议加上环境变量 MEILI_MASTER_KEY
  • 调整 NodeSelectortaint
  • 默认使用 emptyDir 作为 tmpdata 卷,生产肯定需要改成 pvc
1
kubectl apply -f meilisearch.yaml

docker部署meilisearch

官方文档: https://www.meilisearch.com/docs/resources/self_hosting/getting_started/docker

1
2
3
4
5
6
7
mkdir /meili_data

docker run -itd --name meilisearch \
-p 7700:7700 \
-v /meili_data:/meili_data \
-e MEILI_MASTER_KEY='MASTER_KEY'\
getmeili/meilisearch:latest

token暴露问题

部署完成后,我要求 iflow:

  1. 在我的博客顶端中间增加一个颜色素、线条细的搜索框
  2. 搜索框与 Meilisearch 进行关联,并通过 hexo 主题的配置文件 _config.yaml 配置

但完成后发现一个新问题,就是这样我发起搜索的请求中,会直接带有 master key,这肯定不行

有两种方法可以解决:

  1. 使用 master key 向 meilisearch 重新申请一个只有读权限的 key,然后展示这个 key
  2. 在 nginx 后端添加新的路由,并且附带 token 转发到本机的 7700 端口

配置nginx

meilisearch 不使用 bearer auth,而是使用特殊请求头 X-MEILI-API-KEY(全大写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 添加nginx配置
location /search/ {
# 将请求转发到本地 7700 端口
proxy_pass http://127.0.0.1:7700/;

# 在后端隐式添加 Meilisearch API Key
proxy_set_header X-MEILI-API-KEY "xxxxxx";

# 传递其他必要的头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# 限制客户端只能使用 POST 方法
if ($request_method != POST) {
return 405;
}

# 隐藏真实的后端响应头,防止信息泄露
proxy_hide_header X-Meilisearch-Stats;
}

nginx -s reload

# 使用curl在云主机内部进行临时测试
curl -X POST 'http://127.0.0.1:7700/indexes/posts/search' \
-H 'X-Meili-API-Key: xxxx' \
-H 'Content-Type: application/json' \
-d '{"q":"k8s","limit":5}'

# 看到已经可以正常访问meilisearch了,因为此时我还没有往里面传数据
{"message":"Index `posts` not found.","code":"index_not_found","type":"invalid_request","link":"https://docs.meilisearch.com/errors#index_not_found"}

创建索引与导入数据

这一步我让 openclaw 给我做了,主要内容如下:

中途我和它还对自动化、索引格式进行了讨论,所以说用 AI 还得懂技术才能用,不然他直接乱创建索引,查询效率就很低了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
第一步:验证当前 Meilisearch 状态
# 1. 检查索引列表
curl -X GET 'http://114.55.64.10:7700/indexes' \
-H 'X-MEILI-API-KEY: xxxxx'

# 2. 查看 posts 索引详情
curl -X GET 'http://114.55.64.10:7700/indexes/posts' \
-H 'X-MEILI-API-KEY: xxxxx'

第二步:设计数据模型
基于 Hexo 文章结构:

{
"id": "唯一标识(如文件名哈希)",
"title": "文章标题",
"content": "文章纯文本内容",
"excerpt": "摘要",
"date": "发布日期",
"tags": ["标签数组"],
"categories": ["分类数组"],
"url": "文章URL"
}

第三步:创建/配置索引(如果需要)
# 如果 posts 索引不存在,创建它
curl -X POST 'http://114.55.64.10:7700/indexes' \
-H 'X-MEILI-API-KEY: xxxxx' \
-H 'Content-Type: application/json' \
-d '{
"uid": "posts",
"primaryKey": "id"
}'

第四步:提取 Hexo 博客文章
扫描 /blog/source/_posts/ 目录的所有 .md 文件
解析每篇文章:
- 提取 frontmatter(标题、日期、标签、分类)
- 提取内容并转换为纯文本
- 生成唯一ID

第五步:批量导入到 Meilisearch
# 分批导入文章数据
curl -X POST 'http://114.55.64.10:7700/indexes/posts/documents' \
-H 'X-MEILI-API-KEY: xxxxx' \
-H 'Content-Type: application/json' \
-d '[{文章1数据}, {文章2数据}, ...]'

第七步:测试和验证
# 测试搜索功能
curl -X POST 'http://114.55.64.10:7700/indexes/posts/search' \
-H 'X-MEILI-API-KEY: xxxxx' \
-H 'Content-Type: application/json' \
-d '{
"q": "k8s",
"limit": 5,
"attributesToRetrieve": ["title", "date", "tags"],
"attributesToHighlight": ["title"]
}'

搜索框与下拉框问题

现在搜索框点了没反应,但在 F12 中可以看到接口已经返回了搜索到的文章。

这一步失败了很多次,所以重新创建了一个测试环境 /blog-staging,用 docker 运行 nodejs 环境,挂载我的 staging 环境,并暴露 4000 端口。让小龙虾直接改测试环境,我也可以通过 localhost:4000 做测试。


本文记录了使用 iflow 创建 MeiliSearch 搜索框的初步过程,包括部署、安全配置和索引创建。下一篇文章将详细介绍如何使用 OpenClaw 的三 Agent 协同工作流解决搜索功能的具体问题。

CATALOG
  1. 1. k8s部署meilisearch
  2. 2. docker部署meilisearch
  3. 3. token暴露问题
  4. 4. 创建索引与导入数据
  5. 5. 搜索框与下拉框问题