1

私は py2neo 1.6.4 と neo4j 2.0.1 を使用していますが、インデックス付きノードにアクセスする際に奇妙な点を見つけています。特に、index によってアクセスされるインデックス付きノードは、id によってアクセスされるノードと同じオブジェクトを返しません。

例えば:

>>> graph_db.get_or_create_indexed_node('index','key',1)
Node('http://localhost:7474/db/data/node/1')
>>> graph_db.get_indexed_node('index','key',1)
Node('http://localhost:7474/db/data/node/1')   #get works fine after create
>>> graph_db.get_indexed_node('index','key',1).exists
True                                 #the node exists in the db
>>> graph_db.get_indexed_node('index','key',1)._id
1                                    #the id for the node
>>> graph_db.node(1)
Node('http://localhost:7474/db/node/ #note that this is different than the query on the index
>>> graph_db.node(1).exists
False                                #node does not exist in db when accessed by id

そのため、返された ID がインデックス ノードに割り当てられたものとまったく同じであっても、ID によってアクセスされたときに返されたノードは実際にはデータベースに存在しません。

私はneo4jとpy2neoの両方にかなり慣れておらず、インデックス作成について圧倒的に洗練された理解を持っていません.同様に知っている:)

ありがとう!

4

1 に答える 1

2

ノードがデータベースに存在するかどうかを py2neo がどのように判断するかについては完全にはわかりませんが、Neo4j 2.0.0 で導入された新しいインデックスを使用してみてください。ここで使用しているインデックスは、手動で最新の状態に保つ必要がある従来のインデックスであり、その操作に関していくつかの注意事項があります。新しいインデックスは自動的に最新の状態に保たれ、リレーショナル データベースでインデックスが機能するのと同じように、クエリの最適化として機能します。

py2neo がこれらのインデックスを直接公開する方法や公開するかどうかはわかりませんが、py2neos cypher API を介してアクセスできます。一度に 1 つの HTTP 呼び出しからデータを引き出して、クライアント側で作業します。

例えば:

from py2neo import cypher

session = cypher.Session("http://localhost:7474")
tx = session.create_transaction()

# Create an index
tx.append("CREATE INDEX ON :User(name)")
tx.commit()

# Query that will use the index for lookup
tx = session.create_transaction()
tx.append("MATCH (n:User) WHERE n.name='Cat Stevens' RETURN n")
results = tx.execute()
于 2014-03-27T10:51:21.687 に答える