<p>neo4jrestclient支持索引和遍历图形,但我认为仅使用索引对您的用例来说是非常有用的。不过,我不知道我是否理解你的问题。不管怎样,这样的方法可能会奏效:</p>
<pre><code>>>> from neo4jrestclient.client import GraphDatabase
>>> gdb = GraphDatabase("http://localhost:7474/db/data/")
>>> idx = gdb.nodes.indexes.create("urltags")
>>> url_node = gdb.nodes.create(url="http://foo.bar", type="URL")
>>> tag_node = gdb.nodes.create(tag="foobar", type="TAG")
</code></pre>
<p>我们将属性<code>count</code>添加到关系中,以跟踪标记<code>foobar</code>标记的<code>"http://foo.bar"</code>的数量。在</p>
^{pr2}$
<p>然后,我们根据url的值索引url节点。在</p>
<pre><code>>>> idx["url"][url_node["url"]] = url_node
</code></pre>
<p>然后,当我需要创建一个用标记节点标记的新URL节点时,我们首先查询索引以检查它是否已被索引。否则,我们创建节点并索引它。在</p>
<pre><code>>>> new_url = "http://foo.bar2"
>>> nodes = idx["url"][new_url]
>>> if len(nodes):
... rel = nodes[0].relationships.all(types=[tag_node["tag"]])[0]
... rel["count"] += 1
... else:
... new_url_node = gdb.nodes.create(url=new_url, type="URL")
... new_url_node.relationships.create(tag_node["tag"], tag_node, count=1)
... idx["url"][new_url_node["url"]] = new_url_node
</code></pre>