记录neo4j图形数据库关系线的遍历

来源:互联网 发布:豆瓣电影推荐算法 编辑:程序博客网 时间:2024/06/05 02:44
/** *  * 终端设备可视化关系网图 * @param mac * @return * @throws Exception */public JSONObject findEquipByRestAPI(String mac) throws Exception {JSONObject jsonData = new JSONObject();Node startNode = findNode(phoneLabel, "mac", mac.trim());if (startNode == null)return null;if (startNode == null || !startNode.hasLabel(phoneLabel))return null;JSONArray nodeArray = new JSONArray();JSONArray linksArray = new JSONArray();JSONObject nodeobj = new JSONObject();Iterator<String> proKeys = startNode.getPropertyKeys().iterator();int i = 0;nodeobj.put("id", i);String key = "";while (proKeys.hasNext()) {key = proKeys.next();nodeobj.put(key, startNode.getProperty(key).toString());nodeobj.put("type", "phone");}HashMap<Integer,Integer> dict = new HashMap<Integer,Integer>();dict.put((int)startNode.getId(), i);nodeArray.add(nodeobj);//获取关系下的路径TraversalDescription ships = Traversal.description().breadthFirst().relationships(RelationType.CONTAIN).relationships(RelationType.REGISTER).relationships(RelationType.HAVE);//遍历所有的关系pathfor(Path path : ships.traverse(startNode)){int start =0;int end = 0;/*Node start_Node = path.startNode();Node end_Node = path.endNode();*/// path = (21938)--[CONTAIN,22803]-->(21941)<--[CONTAIN,22049]--(21940)Iterator<Relationship> it = path.relationships().iterator();//遍历每条path  获取  [CONTAIN,22803]  开始节点和结束节点     while(it.hasNext()){Relationship next = it.next();//(21940)Node start_Node = next.getStartNode();//(21941)Node end_Node = next.getEndNode();if(start_Node != end_Node){if(dict.toString().contains(start_Node.getId()+"")){start = dict.get((int) start_Node.getId());}else{nodeobj = this.renderer(start_Node);if(nodeobj.size() > 0 && nodeobj != null){start = nodeArray.size();nodeobj.put("id", start);nodeArray.add(nodeobj);dict.put((int) start_Node.getId(), start);}}if(dict.toString().contains(end_Node.getId()+"")){end = dict.get((int)end_Node.getId());}else{nodeobj = this.renderer(end_Node);if(nodeobj.size() > 0 && nodeobj != null){end = nodeArray.size();nodeobj.put("id", end);nodeArray.add(nodeobj);dict.put((int) end_Node.getId(), end);}}JSONObject link = new JSONObject();link.put("source", start);link.put("target", end);if(!linksArray.contains(link)){linksArray.add(link);}}}/*Node start_Node = path.startNode();Node end_Node = path.endNode();*/}jsonData.put("links", linksArray);jsonData.put("nodes", nodeArray);return jsonData;}private JSONObject renderer(Node node) {JSONArray nodeArray = new JSONArray();JSONObject nodeobj = new JSONObject();if (node.hasLabel(phoneLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();if (!"pic".equals(key)) {nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "phone");}}nodeArray.add(nodeobj);}if (node.hasLabel(qqLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();if (!"pic".equals(key)) {nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "qq");}}nodeArray.add(nodeobj);}if (node.hasLabel(emailLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();if (!"pic".equals(key)) {nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "email");}}nodeArray.add(nodeobj);}if (node.hasLabel(accountLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();if (!"pic".equals(key)) {nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "account");}}nodeArray.add(nodeobj);}if (node.hasLabel(personLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "person");}nodeArray.add(nodeobj);}if (node.hasLabel(addressLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "address");}nodeArray.add(nodeobj);}if (node.hasLabel(phonenumberLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "phonenumber");}nodeArray.add(nodeobj);}if (node.hasLabel(wechatLabel)) {Iterator<String> proKeys = node.getPropertyKeys().iterator();while (proKeys.hasNext()) {String key = proKeys.next();nodeobj.put(key, node.getProperty(key).toString());nodeobj.put("type", "wechat");}nodeArray.add(nodeobj);}return nodeobj;}


 Traversal框架的使用(Java版本)


http://blog.csdn.net/u012191627/article/details/50675901