65 lines
1.7 KiB
Go
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}
|
|
}
|