Cypherとは
- グラフ構造のデータを処理するために開発されたクエリ言語
- Neo4jでデータをクエリするために必要
- こんな感じで記述できるらしい
"CREATE (:Person { name: ’Dan’ })-[:MARRIED { day:’1970-02-14 } ]->(:Person { name : ’ Ann’)"
-
コマンド ノード -エッジ-> ノード
みたいな書き方になる。CREATE(コマンド) (:Person { name: ’Dan’ })(ノード) -[:MARRIED { day:’1970-02-14 } ]->(エッジ) (:Person { name: ’Dan’ })(ノード)
-
参照
Cypherの書き方
- Neo4jの公式?ページ
- クエリCheatSheet
Neo4j Python Driver
- 関係性を記載しない場合、ノードのみをデータベースに加えることも可能
from neo4j import GraphDatabase, RoutingControl
URI = "neo4j://neo4j:7687"
AUTH = ("neo4j", "password")
with GraphDatabase.driver(URI, auth=AUTH) as driver:
driver.execute_query(
"""
MERGE (:Person {name:$name})
""",
name="Android",database_="neo4j"
)
- MATCHした後にRETURNして、返ってきたRecordクラスのプロパティにアクセスするには、下記のようにする。
records, _, _ = driver.execute_query(
"MATCH (a:Person)-[:KNOWS]->(friend) WHERE a.name = $name "
"RETURN friend ORDER BY friend.name",
name=name, database_="neo4j", routing_=RoutingControl.READ,
)
for record in records:
print(record['friend']['age']) # friendはname,ageのプロパティを持っていて、ageの値をプリント
- ノードだけでなく、エッジにもプロパティは与えられる。
driver.execute_query(
"MERGE (bro:Person {name: $name}) "
"MERGE (friend:Person {name: $friend_name,age:$age}) "
"MERGE (bro)-[:KNOWS {percent: $percent}]->(friend)", #エッジにpercentというプロパティを与える。
name=name, friend_name=friend_name,age=age,percent=1,database_="neo4j",
)
Cypherクエリ
- ノードを全削除するクエリ
MATCH (n)
DETACH DELETE n