refactor: 重构neo4j服务
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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}
|
||||
}
|
||||
Reference in New Issue
Block a user