Files
knowledge-graph-agent/backend/internal/service/graph_simple.go
T
2026-04-28 12:55:46 +08:00

65 lines
1.7 KiB
Go

package service
import (
"context"
"fmt"
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
"knowledge-graph-backend/internal/model"
)
// GetSimpleGraphData 获取简化的图数据,仅保留核心信息,适合 LLM 处理
func (s *Neo4jService) GetSimpleGraphData() model.SimpleGraphData {
ctx := context.Background()
var nodes []model.SimpleNode
var edges []model.SimpleEdge
nodeResult, err := neo4j.ExecuteQuery(ctx, s.driver,
"MATCH (n) RETURN n",
map[string]any{},
neo4j.EagerResultTransformer,
)
if err != nil {
fmt.Printf("Error querying nodes: %v\n", err)
return model.SimpleGraphData{}
}
for _, record := range nodeResult.Records {
if v, ok := record.Get("n"); ok {
if n, ok := v.(neo4j.Node); ok {
props := n.Props
node := model.SimpleNode{ID: getStr(props, "id"), Label: getStr(props, "label"), Type: getStr(props, "type")}
nodes = append(nodes, node)
}
}
}
edgeResult, err := neo4j.ExecuteQuery(ctx, s.driver,
"MATCH (a)-[r]->(b) RETURN a.id AS source, b.id AS target, r",
map[string]any{},
neo4j.EagerResultTransformer,
)
if err != nil {
fmt.Printf("Error querying edges: %v\n", err)
return model.SimpleGraphData{Nodes: nodes}
}
for _, record := range edgeResult.Records {
source, _ := record.Get("source")
target, _ := record.Get("target")
v, _ := record.Get("r")
if rel, ok := v.(neo4j.Relationship); ok {
props := rel.Props
edge := model.SimpleEdge{Source: getStr(props, "source"), Target: getStr(props, "target"), Type: rel.Type, Label: getStr(props, "label")}
if s, ok := source.(string); ok {
edge.Source = s
}
if t, ok := target.(string); ok {
edge.Target = t
}
edges = append(edges, edge)
}
}
return model.SimpleGraphData{Nodes: nodes, Edges: edges}
}