feat(status): 全文索引降级上报到控制台 —— 让静默降级看得见

上一个提交修的是"卷没挂"这个实例,这个提交修的是"它坏了几周没人发现"这个
类别问题:全文路退内存兜底后,混合检索只表现为召回变差,不报错、无告警。

- mcp-go: bleveStore 记录 persistent;health 工具多报一个 fulltext_disk。
  仍是 map[string]bool,gateway 现有反序列化不受影响(加非 bool 字段会让
  整个 health 解析失败,连带 Milvus/Neo4j 健康灯一起黑)。
- gateway: 基建灯新增「全文索引」一项,退内存时给出后果与排查方向,
  而不只是一盏灰灯。
- admin: 基建列表此前只渲染 name/up,detail 字段一直没露出——而降级原因
  恰恰只存在于 detail 里。补上渲染(离线态用琥珀色),并给「全文索引」
  补 INFRA_META(它不是独立服务,没有端口,落在容器卷上)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-20 13:44:48 +08:00
parent c1420b5665
commit bfd0d74c34
4 changed files with 34 additions and 2 deletions
+4 -1
View File
@@ -19,6 +19,9 @@ import (
// 落盘不可用时退回内存索引(功能在、重启会丢),好过全文路全哑。
type bleveStore struct {
idx bleve.Index
// persistent=false 表示退了内存兜底:功能在但重启即清零。这是**静默降级**——
// 混合检索只会少一路召回、不报错,所以必须上报出去(health → 控制台),否则没人发现。
persistent bool
}
// bleveMappingtext 字段用 cjk 分词器(bigram,能切中文,否则默认标准分词器把整段中文当一个
@@ -62,7 +65,7 @@ func openBleve() *bleveStore {
return memBleve()
}
log.Printf("[rag] bleve 全文索引落盘就绪: %s", path)
return &bleveStore{idx: idx}
return &bleveStore{idx: idx, persistent: true}
}
// memBleve 内存兜底:落盘不可用时退回内存索引(功能在、重启会丢),好过全文路全哑。
+3
View File
@@ -155,6 +155,9 @@ func (e *Engine) Status() map[string]bool {
"milvus": e.mv != nil,
"neo4j": e.graph.ready(),
"embedding": e.embed().ready(),
// 全文路是否落盘持久。false = 退了内存兜底,重启清零 —— 不上报的话这种降级
// 只表现为"召回变差",看不出故障(曾因此静默坏了很久)。
"fulltext_disk": e.bleve != nil && e.bleve.persistent,
}
}