纯前端对接neoj实现知识图谱
使用neo4j-driver工具连接数据库,然后通过语句查询内容 查询语句参考
//封装通用方法
//query=>查询语句 返回值=>查询结果
function executeCypher(query) {
// 创建实例
return new Promise((resolve, reject) => {
//url 数据库地址
//user 用户名
//password 密码
driver.value = neo4j.driver(url, neo4j.auth.basic(user, password));
let session = driver.value.session();
if (query == "") return;
session.run(query, {}).then((result) => {
resolve(result.records)
// records.value = result.records;
session.close();
}).catch(function (error) {
reject(error)
driver.value.close();
});
})
}
let relation = 'CALL db.relationshipTypes()'
//查询所有关系类型
executeCypher(relation).then(res => {
if (res?.length) {
relations = res.map(e=>e.._fields[0])
}
})
//根据关系类型查询结果
// k 关系类型
let query = `MATCH p=()-[r:${k}]->() RETURN p`
executeCypher(query).then(res => {
console.log('返回的结果', res)
//这里将查询到的节点数据处理为echarts需要的格式
})
//nodes是节点组成的数组
//links标识连接关系 source起始节点的name target 目标节点的name
let data = {
nodes: [{
name: '操作系统集团',
category: 0
}, {
name: '浏览器有限公司',
category: 0
}],
links: [{
source: '浏览器有限公司',
target: '操作系统集团',
name: '参股'
}]
}
option = {
title: {
text: '知识图谱',
},
series: [{
type: 'graph',
layout: 'force',
symbolSize: 58,
draggable: true,
roam: true,
focusNodeAdjacency: true,
label: {
show: true
},
force: {
repulsion: 2000,
edgeLength: 120
},
data: data.nodes,
links: data.links
}]
}
总结: 通过executeCypher方法传入查询语句,将返回值处理为需要的格式,然后传给echarts做渲染