NOTE
我让这成为几个问题,而不是我问的简单问题,所以我将后续问题分解为他们自己的问题here https://stackoverflow.com/questions/22867148/creating-unique-relationships-without-creating-unique-nodes-in-neo4j.
原问题
我收到了一个 ID 列表,我首先测试它们是否在我的图表中,如果它们/是/我将进一步处理这些节点。
那么,例如...
fids = get_fids(record) # [100001, 100002, 100003, ... etc]
ids_in_my_graph = filter(id_is_in_graph, fids) # [100002]
def id_is_in_graph(id):
val = False
query = """MATCH (user:User {{id_str:"{}"}})
RETURN user
""".format(id)
n=neo4j.CypherQuery(graph_db,query).execute_one()
if n:
val = True
return(val)
正如您可以想象的那样,使用过滤器执行此操作,顺序测试每个 ID 是否在我的图表中真的非常非常慢,并且显然没有正确使用 Neo4j。
我将如何重新表述我的查询,以便我可以创建一个类似的列表(User{id_str: [mylist]})
只查询并返回图表中的 ID?
您可能想通过利用 cypher 的收集功能来使用 WHERE...IN。这是相关参考 http://docs.neo4j.org/chunked/milestone/query-where.html#_collections
所以您的查询可能如下所示:
MATCH (user:User)
WHERE user.id_str IN ["100001", "100002", "100003"]
return user;
现在,我不知道一个集合可以有多大。如果您的收藏中有 1,000 件物品,我怀疑这是否可行。但至少这是一种将它们分批成块的方法。这应该会提高性能。
还可以查看收藏版块Cypher 2.0 参考卡 http://docs.neo4j.org/refcard/2.0/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)