ð ç¥èã°ã©ãvol.7:Neo4jã®ãCypherãã«å ¥éããŠæåãã話
ã¯ããã«
ãããŸã§ãAIïŒClaudeïŒã«èšãããããŸãŸã« Neo4j Desktop ã§ Cypherã¯ãšãª ãå®è¡ããŠããŸãããèŸ²äœæ¥èšé²ãã°ã©ããšããŠå¯èŠåããã䟿å©ããèã§æããŠã¯ããŸããããã¯ãšãªã®ã³ãŒãèªäœã¯ãåªæãã®ãããªãã®ã§ããã
ä»åãæžç±ãç¥èã°ã©ãæ§ç¯ã¬ã€ããã®ç¬¬3ç« ã«å
¥ããã€ãã«Cypherã®åºæ¬ã§ãã CREATEå¥ ãš MATCHå¥ ãåŠã³ãŸãããå®éã«åãããŠããçµéšããããããããããã®åªæã«ã¯ãããªæå³ããã£ãã®ãïŒããšããæåã倧ããã£ãã®ã§ããã®åŠã³ãå
±æããŸãã
1. Cypherã®çé«ã¯ãçŽæçãªããžã¥ã¢ã«è¡šçŸã
Cypherã¯ãšãªèšèªãåŠãã§æãé©ããã®ã¯ããã®èšèšææ³ã§ããCypherã¯ã人ããã¯ã€ãããŒãã«æããããªãäžžïŒããŒãïŒããšãç¢å°ïŒãªã¬ãŒã·ã§ã³ïŒãããã®ãŸãŸããã¹ãã§è¡šçŸããããšãç®æããŠäœãããŠããŸã ã
èŠèŠçãªææ³
äŸãã°ããRosaã¯ãã«ãªã³ã«äœãã§ããããšããæ å ±ãèšè¿°ããå ŽåãCypherã§ã¯ä»¥äžã®ããã«æžããŸãã
(:Person {name: 'Rosa'})-[:LIVES_IN]->(:Place {city: 'Berlin'})
-
() (äžžæ¬åŒ§): ããŒãïŒç¹ïŒã衚çŸããŠããŸãããŸãã§åãæããŠããããã§ã ã
-
--[]--> (ç¢å°): ããŒãéã®é¢ä¿æ§ã衚çŸããŠããŸã ã
-
{} (æ³¢æ¬åŒ§): ããŒãããªã¬ãŒã·ã§ã³ãæã€ããããã£ïŒååãæ¥ä»ãªã©ã®å±æ§ïŒãæ ŒçŽããŸã ã
ãã®ASCIIã¢ãŒãã®ãããªèšæ³ã®ãããã§ãã¯ãšãªã®æ§é ããã®ãŸãŸç¥èã°ã©ãã®æ§é ãšçŽæçã«äžèŽããŸã ã
2. ãäœãããšãæ¢ããïŒCREATEãšMATCH
ä»åãç¹ã«éç¹çã«åŠãã ã®ããããŒã¿ãä¿åãã CREATE ãšãããŒã¿ãæ€çŽ¢ãã MATCH ã§ãã
CREATEå¥ïŒç¥èãã°ã©ãã«å»ã
æ°ããããŒã¿ãä¿åããã«ã¯ãå ã»ã©ã®ãã¿ãŒã³ã« CREATE ããŒã¯ãŒããä»ããã ãã§ã ã èŸ²äœæ¥èšé²ã·ã¹ãã ã§ããã°ã以äžã®ããã«ãäœæ¥ã€ã³ã¹ã¿ã³ã¹ããäœæã§ããŸãã
CREATE (:WorkInstance {work_date: '2025-12-19', work_type: 'æœè¥'})
ããã§éèŠãªã®ã¯ããªã¬ãŒã·ã§ã³ã®åããæç€ºããããšã§ããäŸãã°ãRosaããã«ãªã³ã«äœãã§ãããã®ã§ãã£ãŠããã«ãªã³ãRosaã«äœãã§ãããã®ã§ã¯ãªããšããäºå®ãæ£ç¢ºã«èšé²ããããã§ã ã
MATCHå¥ïŒãã¿ãŒã³ã§æ å ±ãåŒãåºã
ä¿åããããŒã¿ãåãåºãã«ã¯ MATCH å¥ã䜿ããŸããããã¯ãç¥èã°ã©ãã«å¯ŸããŠãŠãŒã¶ãŒãå®çŸ©ãããã¿ãŒã³ãç §åïŒãã¿ãŒã³ãããã³ã°ïŒãã匷åãªä»çµã¿ã§ã ã
äŸãã°ãç»é²ãããã¹ãŠã®ããŒãã確èªããããšãã¯ã以äžã®ããã«æç€ºããŸãã
MATCH (n) RETURN n LIMIT 10
ããã¯ãä»»æã®ããŒã n ãèŠã€ãããã®å€æ° n ãè¿åŽããããšããæå³ã«ãªããŸã ã
3. ãªããã©ãã«ããéèŠãªã®ãïŒ
åŠãã äžã§ç¹ã«ããªãã»ã©ïŒããšæã£ãã®ããããŒãã«ä»ãã :Person ã :Field ãšãã£ããã©ãã«ã ã®åœ¹å²ã§ã ã
ã©ãã«ã¯åã«åœ¹å²ãæŽçããã ãã§ãªããããŒã¿ããŒã¹å éšã§ã¯èªåçã«ã€ã³ããã¯ã¹ãšããŠæŽ»çšãããŸã ã ããã«ãã£ãŠãç¥èã°ã©ãã®èŠæš¡ã倧ãããªã£ãŠããç¹å®ã®åœ¹å²ãæã€ããŒã¿ãé«éã«æ€çŽ¢ã§ããããã«ãªããŸã ã
ããã¡ã€ã³ã«ã€ããŠç¥ã£ãŠããããšãããã°ãç©æ¥µçã«ã©ãã«ãšããŠå«ããã¹ãããšããæèšã¯ãä»åŸã®èŸ²äœæ¥èšé²ã·ã¹ãã ã®æ¡åŒµã«ãããŠãéåžžã«éèŠãªæéã«ãªããŸãã ã
4.å®è·µã§äœ¿ã£ãCypherã®äŸ
ãããŸã§äœæ¥èšé²ãNeo4jã®ããŒã¿ããŒã¹ã«èšé²ãããšãã«äœ¿ã£ãCypherã®äŸãæããŸãã
å®è·µã§äœ¿ã£ãCypherã®äŸ
ð å®è·µã§äœ¿ã£ãCypherã®äŸ
- åºæ¬ãã¿ãŒã³
//cypher
MATCH (n) RETURN n LIMIT 10
MATCH (n:Label) RETURN count(n)
- ãªã¬ãŒã·ã§ã³æ€çŽ¢
//cypher
MATCH (a)-[r]->(b) RETURN a, r, b
MATCH (a:Label1)-[:REL_TYPE]->(b:Label2)
- ãã¹æ€çŽ¢
//cypher
MATCH (a)-[:REL1]->(b)-[:REL2]->(c)
- ããŒã¿äœæ
//cypher
CREATE (n:Label {property: value})
CREATE (a)-[:REL]->(b)
- å€§èŠæš¡ã€ã³ããŒã
//cypher
LOAD CSV WITH HEADERS FROM 'file:///...'
ãŸãšãïŒåªæããèšèãã«å€ããç¬é
ãããŸã§ã¯ãClaudeã«çæããŠããã£ãã¯ãšãªããå®è¡ããã ãã§ãããããã®æ§é ãçè§£ãå§ãããšãCypherãéåžžã«äººéã«ãšã£ãŠãã¬ã³ããªãŒãªèšèªã§ããããšãåãããŸããã
ç¹ã«ããªã¬ãŒã·ã§ã³ãã©ã®åãããã§ãäžå®ã®ã³ã¹ãã§èµ°æ»ã§ãããšããã°ã©ãDBç¹æã®æ§è³ªã¯ãè€éãªèŸ²äœæ¥ãªã³ãããžãŒïŒCAVOCïŒãæ±ãäžã§å€§ããªæŠåšã«ãªããŸã ã
次ã¯ããã£ãšè€éãªæ¡ä»¶ã§ã®æ€çŽ¢ããè€æ°ã®ããŒããè·šãã åæã¯ãšãªã«ææŠããã·ã¹ãã ããããè³¢ããè²ãŠãŠãããããšæããŸãïŒ
Discussion