def show_relation(node_key1, node1_id, node1_index_name, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) print node_index print group_index tx = graph.begin() node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'does not exist' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r]-(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id) # return c_string print c_string result = graph.run(c_string) # print result rel_list = [] for item in result: relation = dict(item)['r'].type() relation_ch = relation_dict[relation] if relation in [other_rel, event_other, organization_tag, user_tag]: relation_name = dict(item)['r']['name'] relaiton_name_list = relation_name.split(',') for i_name in relaiton_name_list: relation_ch2 = relation_ch + '-' + i_name relation = relation + '&' + relation_name rel_list.append(relation_ch2) else: rel_list.append(relation_ch) return rel_list
def create_rel_from_uid2_domain(): Index = ManualIndexManager(graph) # manage index domain_name = "domain_index" node_index = Index.get_index(Node, "node_index") domain_index = Index.get_index(Node, domain_name) domain_node = domain_index.get("domain", "媒体") tx = graph.begin() count = 0 ts = time.time() f = open("user_portrait.txt", "rb") for line in f: user_dict = json.loads(line) uid = user_dict["uid"] print uid print count domain = user_dict["domain"] user_node = node_index.get("uid", uid)[0] domain_node = domain_index.get("domain", domain)[0] rel = Relationship(user_node, "domain", domain_node) tx.create(rel) count += 1 if count % 1000 == 0: tx.commit() print count te = time.time() print te - ts ts = te tx = graph.begin() tx.commit()
def create_rel(node_key1, node1_list, node1_index_name, rel, node_key2, node2_id, node2_index_name, submit_user): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) tx = graph.begin() for node1_id in node1_list: # print node2_id # print node1_id,'-----' # node1 = node_index.get(node_key1, node1_id) try: node1 = node_index.get(node_key1, node1_id)[0] # print node1, node1_id,'node1 hey2222!!' except: continue # print node1, node1_id,'node1 hey!!' return 'uid1 not exist' node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'node does not exist' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(c_string) rel_list = [] for item in result: print item,'00000000000' rel_list.append(item) if rel not in rel_list: rel2 = Relationship(node1, rel, node2) graph.create(rel2) print "create success" else: return 'has relation' return '1'
def create_relationship(st_node, ed_node, rel_type, st_type="node_index", ed_type="node_index", st_index="uid", ed_index="uid"): Index = ManualIndexManager(graph) # manage index start_index = Index.get_index(Node, st_type) start_node = start_index.get(st_index, st_node) if start_node: start_node = start_node[0] else: print "start_node no exists" sys.exit(0) end_index = Index.get_index(Node, ed_type) end_node = end_index.get(ed_index, ed_node) if end_node: end_node = end_node[0] else: print "end_node no exists" sys.exit(0) c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( st_type, st_index, st_node, ed_type, ed_index, ed_node, rel_type) result = graph.run(c_string) rel_list = [] for item in result: rel_list.append(item) if not rel_list: rel = Relationship(start_node, rel_type, end_node) graph.create(rel) print "create"
def create_rel_from_uid2_topic(): Index = ManualIndexManager(graph) # manage index topic_name = "topic_index" node_index = Index.get_index(Node, "node_index") topic_index = Index.get_index(Node, topic_name) tx = graph.begin() count = 0 ts = time.time() f = open("user_portrait.txt", "rb") for line in f: user_dict = json.loads(line) uid = user_dict["uid"] topic_string = user_dict["topic_string"] user_node = node_index.get("uid", uid)[0] topic_list = topic_string.split("&") for iter_topic in topic_list: topic_node = topic_index.get("topic", iter_topic)[0] rel = Relationship(user_node, "topic", topic_node) tx.create(rel) count += 1 if count % 1000 == 0: tx.commit() print count te = time.time() print te - ts ts = te tx = graph.begin() tx.commit()
def create_rel_from_uid2_location(): Index = ManualIndexManager(graph) # manage index node_index = Index.get_index(Node, node_index_name) location_index = Index.get_index(Node, location_index_name) tx = graph.begin() count = 0 ts = time.time() f = open("user_portrait.txt", "rb") for line in f: user_dict = json.loads(line) uid = user_dict["uid"] location = user_dict["location"] if not location: continue user_node = node_index.get("uid", uid)[0] location_node = location_index.get("location", location)[0] rel = Relationship(user_node, "location", location_node) tx.create(rel) count += 1 if count % 1000 == 0: tx.commit() print count te = time.time() print te - ts ts = te tx = graph.begin() tx.commit()
def create_rel(node_key1, node1_list, node1_index_name, rel, node_key2, node2_id, node2_index_name, submit_user): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) tx = graph.begin() print node1_list, '00990909000000000000' for node1_id in node1_list: print node1_id, '----==!!!==----' node1 = node_index.get(node_key1, node1_id) node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'node does not exist' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(c_string) rel_list = [] for item in result: rel_list.append(item) if rel not in rel_list: rel2 = Relationship(node1, rel, node2) graph.create(rel2) print "create success" return 'success'
def create_node_or_node_rel(node_key1, node1_id, node1_index_name, rel, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) print node_index print group_index tx = graph.begin() node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'does not exist' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) # return c_string result = graph.run(c_string) # print result # rel_list = [] for item in result: rel_list.append(item) # print rel_list if rel in rel_list: return 'has relation already' rel = Relationship(node1, rel, node2) graph.create(rel) print "create success" return True
def create_node_or_node_rel(node_key1, node1_id, node1_index_name, rel, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) tx = graph.begin() if len(node_index.get(node_key1, node1_id)) == 0: return 'Node1 does not exist' if len(group_index.get(node_key2, node2_id)) == 0: return "Node2 does not exist" node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): return "Node1 and Node2 do not exist" c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" \ % (node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(c_string) # print result rel_list = [] for item in result: rel_list.append(item) if not rel_list: rel = Relationship(node1, rel, node2) graph.create(rel) return "Create success" else: return "The current two nodes already have a relationship"
def create_node_or_node_rel(node_key1, node1_id, node1_index_name, rel, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) print node_index print group_index tx = graph.begin() node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return '1' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( node1_index_name, 'pname', node1_id, node2_index_name, 'pname', node2_id, rel) print c_string result = graph.run(c_string) print result rel_list = [] for item in result: rel_list.append(item) print rel_list if not rel_list: rel = Relationship(node1, rel, node2) graph.create(rel) print "create success" else: print "The current two nodes already have a relationship" return '0' return '2'
def create_node_or_node_rel(node_key1, node1_id, node1_index_name, rel_union, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) print node_index print group_index tx = graph.begin() node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'does not exist' # c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( # node1_index_name,node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) # # return c_string # result = graph.run(c_string) # # print result # rel_list = [] # for item in result: # rel_list.append(item) # # print rel_list # if rel in rel_list: # return 'has relation already' rel = rel_union.split(',')[0] if rel in [other_rel, event_other, organization_tag, user_tag]: rel_name = rel_union.split(',')[1] c_string = "START start_node=node:%s(%s='%s'), end_node=node:%s(%s='%s') \ MATCH (start_node)-[r:%s]->(end_node) RETURN type(r), r.name" % (node1_index_name,\ node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(c_string) exist_relation = [] for i in result: dict_i = dict(i) exist_relation = dict_i['r.name'].split(',') if exist_relation: del_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') \ MATCH (start_node)-[r:%s]->(end_node) delete r" % (node1_index_name,\ node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(del_string) exist_relation.append(rel_name) exist_relation = [i for i in set(exist_relation)] add_relation_string = ','.join(exist_relation) c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s')\ create (start_node)-[r:%s {name:'%s'} ]->(end_node) " %(node1_index_name,\ node_key1, node1_id, node2_index_name, node_key2, node2_id, rel, add_relation_string) result = graph.run(c_string) else: rel = Relationship(node1, rel, node2) graph.create(rel) print "create success" return True
def create_rel_from_event_special(event, special_event): Index = ManualIndexManager(graph) # manage index event_index = Index.get_index(Node, event_index_name) special_event_index = Index.get_index(Node, special_event_index_name) node1 = event_index.get("event", event)[0] node2 = special_event_index.get("event", special_event)[0] rel = Relationship(node1, event_special, node2) tx = graph.begin() tx.create(rel) tx.commit()
def create_user2user_rel(uid_list, rel_type): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) tx = graph.begin() count = 0 """ f = open("user_portrait.txt", "rb") uid_list = [] for line in f: user_dict = json.loads(line) uid = user_dict["uid"] uid_list.append(uid) """ for i in range(len(uid_list) - 1): for j in range(i + 1, len(uid_list)): user1 = uid_list[i] user2 = uid_list[j] user_node1 = node_index.get("uid", user1)[0] user_node2 = node_index.get("uid", user2)[0] prob = random.random() if prob <= 0.03: rel = Relationship(user_node1, rel_type, user_node2) tx.create(rel) count += 1 if count % 100 == 0: tx.commit() print count tx = graph.begin() tx.commit() print "finish"
def delete_rel(node_key1, node1_id, node1_index_name, rel, node_key2, node2_id, node2_index_name): list = [] Index = ManualIndexManager(graph) node1_index = Index.get_index(Node, node1_index_name) node2_index = Index.get_index(Node, node2_index_name) if not (node1_index or node2_index): print "node_index does not exist" return None node1 = node1_index.get(node_key1, node1_id)[0] node2 = node2_index.get(node_key2, node2_id)[0] if not (node1 or node2): print("node does not exist") c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]-(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) result = graph.run(c_string) for item in result: list.append(item) if not list: print "Deleted rel does not exist" return None c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]-(end_node) DELETE r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) print c_string graph.run(c_string) print "delete success" return True
def create_node_location(): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) location_index = Index.get_or_create_index(Node, location_index_name) f = open("user_portrait.txt", "rb") count = 0 update_node = [] index_list = [] in_set = set() tx = graph.begin() for item in f: user_dict = json.loads(item) each_location = user_dict["location"] exist = location_index.get("location", each_location) if not exist and each_location not in in_set: node = Node("Location", location=each_location) tx.create(node) index_list.append([each_location, node]) count += 1 in_set.add(each_location) if count % 10 == 0: print count tx.commit() tx = graph.begin() for item in index_list: location_index.add("location", item[0], item[1]) index_list = [] tx.commit() if index_list: for item in index_list: location_index.add("location", item[0], item[1]) print "all done" f.close()
def create_relationship(st_node, ed_node, rel_type): Index = ManualIndexManager(graph) # manage index node_name = "node_index" node_index = Index.get_index(Node, node_name) start_node = node_index.get("uid", st_node) end_node = node_index.get("uid", ed_node) c_string = "START start_node=node:node_index(uid='%s'),end_node=node:node_index(uid='%s') MATCH (start_node)-[r:'%s']->(end_node) RETURN r" % ( st_node, ed_node, rel_type) result = graph.run(c_string) for item in result: print item
def get_user_attribute_by_index(uid): ts = time.time() Index = ManualIndexManager(graph) # manage index node_name = "node_index" node_index = Index.get_index(Node, node_name) user_node = node_index.get("uid", uid) print user_node te = time.time() print te - ts return user_node
def update_node(key_id, uid, node_name, attribute_dict): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_name) node = node_index.get(key_id, uid)[0] if not node: return "No such node" for k, v in attribute_dict.iteritems(): node[k] = v graph.push(node) return "Update success"
def create_rel_from_uid2group(node_key, uid_list, node_index_name, group_rel, group_key, group_id, group_index_name): count = 0 Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) group_index = Index.get_index(Node, group_index_name) tx = graph.begin() if not (node_index and group_index): print "node or group does not exist" return None for uid in uid_list: node = node_index.get(node_key, uid)[0] group_node = group_index.get(group_key, group_id)[0] rel = Relationship(node, group_rel, group_node) tx.create(rel) count += 1 if count % 100 == 0: tx.commit() print count tx = graph.begin() tx.commit()
def delete_user(uid): Index = ManualIndexManager(graph) # manage index node_name = "node_index" node_index = Index.get_index(Node, node_name) user_node = node_index.get("uid", uid) print user_node if not user_node: print "no user exists" return None #c_string = "MATCH (n {uid: '%s'})-[rel]->(fof) DELETE n,rel" %uid c_string = "START start_node=node:node_index(uid='%s') MATCH (start_node)-[rel]->(fof) DELETE start_node, rel" % uid result = graph.run(c_string) print result
def show_relation(node_key1, node1_id, node1_index_name, rel, node_key2, node2_id, node2_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node1_index_name) group_index = Index.get_index(Node, node2_index_name) print node_index print group_index tx = graph.begin() node1 = node_index.get(node_key1, node1_id)[0] node2 = group_index.get(node_key2, node2_id)[0] if not (node1 and node2): print "node does not exist" return 'does not exist' c_string = "START start_node=node:%s(%s='%s'),end_node=node:%s(%s='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % ( node1_index_name, node_key1, node1_id, node2_index_name, node_key2, node2_id, rel) # return c_string result = graph.run(c_string) # print result # rel_list = [] for item in result: rel_list.append(item) return rel_list
def update_node(key_id, uid, node_index_name, attribute_dict): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) node = node_index.get(key_id, uid)[0] print node if not node: print "no such node" sys.exit(0) for k, v in attribute_dict.iteritems(): node[k] = v graph.push(node) print "update success" return True
def create_rel_from_uid2group(uid_list, group_id): count = 0 Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) group_index = Index.get_index(Node, group_index_name) tx = graph.begin() for user in uid_list: exist = node_index.get("uid", user) if exist: node = exist[0] else: node = Node("User", uid=user) graph.create(node) node_index.add("uid", user, node) group_node = group_index.get("group", group_id)[0] rel = Relationship(node, group_rel, group_node) tx.create(rel) count += 1 if count % 100 == 0: tx.commit() print count tx = graph.begin() tx.commit()
def create_rel_uid2event(uid_list, event_id, rel_type): count = 0 Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) event_index = Index.get_index(Node, event_index_name) tx = graph.begin() for user in uid_list: exist = node_index.get("uid", user) if exist: node = exist[0] else: node = Node("User", uid=user) graph.create(node) node_index.add("uid", user, node) event_node = event_index.get("event", event_id)[0] rel = Relationship(node, rel_type, event_node) tx.create(rel) count += 1 if count % 100 == 0: tx.commit() print count tx = graph.begin() tx.commit()
def select_rels(node_key, node_id, node_name_index): list = [] Index = ManualIndexManager(graph) node_name = Index.get_index(Node, node_name_index) if not node_name: return "Node_index does not exist " node = node_name.get(node_key, node_id)[0] if not node: return "Node does not exist" c_string = "START start_node=node:%s(%s='%s') MATCH (start_node)-[r]-() return r" % ( node_name_index, node_key, node_id) print c_string result = graph.run(c_string) for item in result: list.append(item) return list
def update_attribute(uid, attribute_dict): ts = time.time() Index = ManualIndexManager(graph) # manage index ts = time.time() node_name = "node_index" node_index = Index.get_index(Node, node_name) user_node = node_index.get("uid", uid)[0] # return with a list print user_node # update attribute-value for k, v in attribute_dict.iteritems(): user_node[k] = v # push to neo4j-db graph.push(user_node) te = time.time() print te - ts
def create_user(user, attribute_dict=dict()): Index = ManualIndexManager(graph) # manage index node_name = "node_index" node_index = Index.get_index(Node, node_name) exist = node_index.get("uid", user) if exist: user_node = exist[0] for k, v in attribute_dict.iteritems(): user_node[k] = v graph.push(user_node) else: user_node = Node("User", uid=user) for k, v in attribute_dict.iteritems(): user_node[k] = v graph.create(user_node) node_index.add("uid", user, user_node) return True
def delete_node(node_key, node_id, node_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) if not node_index: return "Node_index does not exist" node = node_index.get(node_key, node_id)[0] if not node: return "Node does not exist" c_string = "START start_node=node:%s(%s='%s') MATCH (start_node)-[r]-() DELETE r" % ( node_index_name, node_key, node_id) graph.run(c_string) c_string = "START start_node=node:%s(%s='%s') delete start_node" % ( node_index_name, node_key, node_id) graph.run(c_string) return 'Node delete success'
def delete_node(node_key, node_id, node_index_name): Index = ManualIndexManager(graph) node_index = Index.get_index(Node, node_index_name) if not node_index: print "node_index does not exist" return None node = node_index.get(node_key, node_id)[0] if not node: print "The node does not exist" return None c_string = "START start_node=node:%s(%s='%s') MATCH (start_node)-[r]-() DELETE r" % ( node_index_name, node_key, node_id) graph.run(c_string) print "delete rel success" c_string = "START start_node=node:%s(%s='%s') delete start_node" % ( node_index_name, node_key, node_id) graph.run(c_string) print "delete node success" return True
def put_in_user_portrait(): Index = ManualIndexManager(graph) # manage index Batch_index = ManualIndexWriteBatch(graph) tx = graph.begin() index_list = [] # temporal put in node_name = "node_index" node_index = Index.get_index(Node, node_name) f = open("user_portrait.txt", "rb") count = 0 filter_set = set() for item in f: user_dict = json.loads(item) user = user_dict["uid"] exist = node_index.get("uid", user) if not exist and user not in filter_set: node = Node("User", uid=user) tx.create(node) index_list.append([user, node]) filter_set.add(node) count += 1 if count % 1000 == 0: print count tx.commit() tx = graph.begin() for item in index_list: node_index.add("uid", item[0], item[1]) #Batch_index.add_to_index(Node, node_name, "uid", item[0], item[1]) index_list = [] filter_set = set() tx.commit() if index_list: for item in index_list: node_index.add("uid", item[0], item[1]) #Batch_index.add_to_index(Node, node_name, "uid", item[0], item[1]) print count f.close()