From efd6a8d9902e79df852012bf4a3fa94e1f8889cb Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Fri, 21 Aug 2026 19:05:17 +0800
Subject: [PATCH] feat(graph): tag/entity 虚拟节点落库为真实节点(合成 path 命名空间)
---
internal/graph/builder.go | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/internal/graph/builder.go b/internal/graph/builder.go
index 428535b..ce5f0ea 100644
--- a/internal/graph/builder.go
+++ b/internal/graph/builder.go
@@ -15,13 +15,19 @@
labelToID := make(map[string]int64)
nextVirtualID := int64(1000000) // 虚拟节点从 1000000 开始
- getOrCreateVirtualNode := func(label string) int64 {
+ getOrCreateVirtualNode := func(label, nodeType string) int64 {
if id, ok := labelToID[label]; ok {
return id
}
id := nextVirtualID
nextVirtualID++
labelToID[label] = id
+ g.Nodes = append(g.Nodes, &Node{
+ ID: id,
+ Path: label, // label 已含 "tag:"/"entity:" 前缀
+ Title: strings.TrimPrefix(strings.TrimPrefix(label, "tag:"), "entity:"),
+ NodeType: nodeType,
+ })
return id
}
@@ -31,6 +37,7 @@
Path: f.Path,
Title: f.Title,
Section: f.Section,
+ NodeType: "file",
Tags: f.Tags,
Entities: f.Entities,
Wikilinks: f.Wikilinks,
@@ -40,7 +47,7 @@
// 创建 tag 边
for _, tag := range f.Tags {
- virtualID := getOrCreateVirtualNode("tag:" + tag)
+ virtualID := getOrCreateVirtualNode("tag:"+tag, "tag")
g.Edges = append(g.Edges, &Edge{
FromNode: node.ID,
ToNode: virtualID,
@@ -51,7 +58,7 @@
// 创建 entity 边
for _, entity := range f.Entities {
- virtualID := getOrCreateVirtualNode("entity:" + entity)
+ virtualID := getOrCreateVirtualNode("entity:"+entity, "entity")
g.Edges = append(g.Edges, &Edge{
FromNode: node.ID,
ToNode: virtualID,
--
Gitblit v1.10.0