neo4jrestclient索引结果返回Iterable而不是node / url?

时间:2012-05-10 02:01:12

标签: python indexing neo4j neo4j.py

我正在尝试关注文档 http://readthedocs.org/docs/neo4j-rest-client/en/latest/indices.html

我希望索引查询返回一个节点,但它返回一个“Iterable:Node”:

db = GraphDatabase("http://localhost:7474/db/data")
playerIndex = db.nodes.indexes.get("index1")
playerNode = db.nodes.create(player_id = "Homer")
playerIndex.add("player_id", "Homer", playerNode)
print playerIndex["player_id"]["Homer"], "\n", playerNode

打印:

<Neo4j Iterable: Node>
<Neo4j Node: http://localhost:7474/db/data/node/157>

如何获取neo4jrestclient索引查询结果以返回类似第二行的节点?

2 个答案:

答案 0 :(得分:3)

索引查找可以返回多个节点,所以在这种情况下,它返回一个迭代器。要获取迭代器中的下一个项,请执行.next():

print playerIndex["player_id"]["Homer"].next(), "\n", playerNode

请参阅:https://github.com/versae/neo4j-rest-client/blob/master/neo4jrestclient/iterable.py

答案 1 :(得分:3)

正如@espeed指出的那样,调用.next()将为您提供索引中的下一个节点。 您还可以遍历迭代器:

for node in playerIndex["player_id"]["Homer"]:
    print node, "\n", playerNode

或者只是使用切片[:]

获取迭代器中的所有结果
print playerIndex["player_id"]["Homer"][:], "\n", playerNode

客户端以这种方式运行,因为任何索引查询总是返回元素列表,即使只有一个元素。因此,处理此问题的最佳方法是使用延迟加载的迭代器。