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} }