纯前端对接neoj实现知识图谱

243 阅读1分钟

纯前端对接neoj实现知识图谱

image.png

使用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做渲染