4

我找到了相关的方法:

  1. find- 不起作用,因为此版本neo4j不支持标签。
  2. match- 不起作用,因为我无法指定关系,因为节点还没有关系。
  3. match_one- 与 相同match
  4. node- 不起作用,因为我不知道节点的 ID。

我需要一个等价物:

start n = node(*) where n.name? = "wvxvw" return n;

密码查询。看起来应该是基本的,但实际上不是...

PS。我反对使用 Cypher 的理由太多了。所以这也不是一个选择。

4

4 回答 4

1

好吧,您应该创建索引以减少起始节点。这将通过使用标签自动处理,但与此同时,可以解决。

  1. 创建一个索引,比如“标签”,它将有指向您将拥有的不同类型节点的键(在您的情况下,说“人”)
  2. 现在在搜索时,您可以编写以下查询:

     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.
    
于 2013-11-11T17:24:51.130 回答
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]有顶部项目,以防您想要/期望单个节点。

于 2014-01-10T22:54:55.657 回答
1

使用选择器从图中获取节点以下代码从匹配搜索的节点列表中获取第一个节点

selector = NodeSelector(graph)
node = selector.select("Label",key='value')
nodelist=list(node)
m_node=node.first()
于 2016-07-19T13:20:00.823 回答
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

请参阅我的其他答案以创建merge_one()将接受多个属性的...

于 2015-06-04T04:30:13.633 回答