【问题标题】:Traversal with multiple seed nodes多个种子节点的遍历
【发布时间】:2014-05-07 13:22:36
【问题描述】:

我编写了一个快速脚本,通过 Neo4j 的遍历框架 REST API 运行遍历查询:

from py2neo import neo4j
import requests
import json

dbURI = 'http://localhost:7474/db/data/'

def graphTraversal (nodeId):
    returnType = 'path'

    payload = {
        'order': 'breadth_first',
        'uniqueness': 'node_global',
        'relationships': [{
            'direction': 'all',
            'type': 'associatedMusicalArtist' 
        }],
        'max_depth': 2
    }
    payload = json.dumps(payload)

    headers = {
        'Accept': 'application/json; charset=UTF-8',
        'Content-Type': 'application/json'
    }

    uri = dbURI + '/node/' + nodeId + '/traverse/' + returnType
    print '\n> Traversal of ' + uri + ' ...'
    res = requests.post(uri, data=payload, headers=headers)
    print res.text
    return res.json();

def getNodeByUri (db, key, value):
    return db.get_indexed_node('nodeIdx', key, value)

def getNodeId (node):
    return str(node._id)

def main ():
    db = neo4j.GraphDatabaseService(dbURI)

    node = getNodeByUri(db, '__URI__', 'http://dbpedia.org/resource/Jimi_Hendrix')
    nodeId = getNodeId(node)

    rels = graphTraversal(nodeId)

if __name__ == '__main__':
    main()

代码运行良好,但我有一个问题:

  • 如何使用多个种子/根节点运行相同的遍历?

我知道 Java 驱动程序允许这样做,但对于 Python,文档并不清楚如何做到这一点。

提前致谢!

编辑:这是我关注的Neo4j's traversal framework REST API 文档的链接。

【问题讨论】:

    标签: python neo4j traversal py2neo


    【解决方案1】:

    没有直接的方法可以做到这一点,遍历端点都是单节点的。

    您可以使用 Batch API 来实现,在单个 HTTP 请求中发送大量遍历请求。看看这里:

    http://docs.neo4j.org/chunked/stable/rest-api-batch-ops.html

    但是

    对于你正在运行的遍历,你可以很容易地用 Cypher 来表达它,然后你就可以给它多个起点,就像这样:

    START n=node(1,2,3,4,5) MATCH (n)-[:associatedMusicalArtist*0..2]-(other) RETURN other
    

    然后您可以将其发送到事务端点:

    http://docs.neo4j.org/chunked/stable/rest-api-transactional.html

    【讨论】:

    • 感谢您的回答!我知道你可以用 Cypher 做到这一点,但你不会失去对“bread_first”和“depth_first”搜索顺序的控制吗?是否也可以指定一系列可能的关系?
    • 您对搜索顺序的控制很松散,是的。您可以使用以下语法让它查找多种关系类型:(n)-[:associatedMusicalArtist | someotherType * 0..2]-(other)
    • 谢谢!我肯定会考虑使用密码代替! =D
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2013-09-13
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多