我找到了相关的方法:
find
- 无效,因为此版本的neo4j
不支持标签。match
- 不起作用,因为我无法指定关系,因为该节点尚未建立关系。match_one
- 与match
相同。node
- 不起作用,因为我不知道节点的ID。我需要等同于:
start n = node(*) where n.name? = "wvxvw" return n;
Cypher查询。似乎它应该是基本的,但它确实不是......
PS。我反对使用Cypher提出太多理由。所以这也不是一个选择。
答案 0 :(得分:1)
那么,您应该创建索引以便减少起始节点。这将通过使用标签自动处理,但与此同时,可以解决这个问题。
现在搜索时您可以编写以下查询:
START n = node:label(key_name='Person') WHERE n.name = 'wvxvw' RETURN n; //key_name is the key's name you will assign while creating the node.
答案 1 :(得分:1)
user797257似乎不在游戏中,但我认为这仍然有用:
如果要获取节点,则需要创建索引。 Neo4j中的索引与MySQL或任何其他数据库中的索引相同(如果我理解正确的话)。标签基本上是自动索引,但索引提供了额外的速度。 (我同时使用)。
在某处,或在neo4j本身创建一个索引:
index = graph_db.get_or_create_index(neo4j.Node, "index_name")
然后,像往常一样创建节点,但确实将其添加到索引中:
new_node = batch.create(node({"key":"value"}))
batch.add_indexed_node(index, "key", "value", new_node)
现在,如果您需要找到new_node,请执行以下命令:
new_node_ref = index.get("key", "value")
返回一个列表。如果您想要/期望单个节点,new_node_ref[0]
具有顶部项目。
答案 2 :(得分:1)
使用selector从图中获取节点 以下代码从与搜索
匹配的节点列表中提取第一个节点selector = NodeSelector(graph)
node = selector.select("Label",key='value')
nodelist=list(node)
m_node=node.first()
答案 3 :(得分:0)
使用py2neo
,这个hacky函数将迭代属性和值,并逐渐消除所有与提交的每个条件不匹配的节点。最终结果将是所有(如果有)节点的列表,这些节点匹配所提供的所有属性和标签。
def find_multiProp(graph, *labels, **properties):
results = None
for l in labels:
for k,v in properties.iteritems():
if results == None:
genNodes = lambda l,k,v: graph.find(l, property_key=k, property_value=v)
results = [r for r in genNodes(l,k,v)]
continue
prevResults = results
results = [n for n in genNodes(l,k,v) if n in prevResults]
return results
请参阅我的other answer创建一个可接受多个属性的merge_one()
...