f_
frhyme.code
•others•โฑ ์•ฝ 3๋ถ„ ์†Œ์š”

Neo4j - cypher - cypher projection

๐Ÿ“‘ ๋ชฉ์ฐจ (Contents)

cypher projection in neo4j algorithm.

  • ์š”์ฆ˜ neo4j์—์„œ ์‚ฌ์šฉํ•˜๋Š” pagerank algorithm์„ ์กฐ๊ธˆ ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ฃ . ์ฆ‰, ์ฒซ๋ฒˆ์งธ์—๋Š” node label์„, ๋‘๋ฒˆ์งธ์—๋Š” relationship type์„ ์„ธ๋ฒˆ์งธ์—๋Š” config์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜์ฃ .
CALL algo.pageRank.stream('Article', 'CITED', {sourceNodes: sourceNodes})
YIELD nodeId, score
  • ๊ทธ๋Ÿฐ๋ฐ, ๋ช‡๋ช‡ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋‹ค์Œ์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฒซ๋ฒˆ์งธ๋กœ๋Š” node๋“ค์˜ ID๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ณ ,
    • ๋‘๋ฒˆ์งธ๋กœ๋Š” source, target์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฑธ ๋ณด๋‹ˆ, directional edge๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ ,
    • ์„ธ๋ฒˆ์งธ config ์ž๋ฆฌ์—๋Š” graph: "cypher"๋ผ๋Š” ๋œฌ๊ธˆ์—†๋Š” ๊ฐ’๋“ค์ด ๋“ค์–ด๊ฐ€์ฃ .
CALL algo.pageRank(
'MATCH (n) RETURN id(n) AS id',
"MATCH (n)-->(m) RETURN id(n) AS source, id(m) AS target",
{graph: "cypher"})
  • ์ด๊ฒŒ ๋ฌด์—‡์ธ๊ฐ€ ์ฐพ์•„๋ณด๋‹ˆ, cypher-projection์ด๋ผ๊ณ  ํ•˜๋Š”, ์ฆ‰ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ์„œ ๊ฐ€์ ธ์˜ค๋Š” ํ˜•ํƒœ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋‚ด์šฉ์„ ๋‹ค์Œ์— ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๊ตณ์ด algorithm์—๋งŒ ์ด๋Ÿฌํ•œ cypher-projection์ด ์žˆ๋Š” ์ด์œ ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ ์šฉํ•  ๋•Œ, ๋‹ค์–‘ํ•œ sub-graph๋ฅผ ์ ์šฉํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ฒ ์ฃ . ๋‹จ์ˆœํžˆ node label, rel label ๋งŒ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ์ถฉ๋ถ„ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ์— ๋งž์ถฐ์„œ ๋…ธ๋“œ์™€ edge๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํŠน์ •ํ•œ graph์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”.

  • ๋”ฐ๋ผ์„œ, ์ด๋Ÿฌํ•œ cypher-projection์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ์˜ ์šฉ๋ฒ•์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    • node-statement instead of the label parameter
    • relationship-statement instead of the relationship type
    • graph:'cypher' in the config.
  • ๋”ฐ๋ผ์„œ ๋‹ค์Œ์˜ ํ˜•ํƒœ๊ฐ€ ๋˜์ฃ . ์œ ์˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€, node, source to target์ด ๋ชจ๋‘ id๋กœ ์ •๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

CALL algo.<name>(
  'MATCH (n) RETURN id(n) AS id',
  'MATCH (n)-->(m) RETURN id(n) AS source, id(m) AS target',
  {graph: "cypher"})

wrap-up

  • ํ•„์š”์— ๋”ฐ๋ผ์„œ, ์ด๋Ÿฐ์‹์œผ๋กœ query๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ, ์ฟผ๋ฆฌ๊ฐ€ ์ „๋ฐ˜์ ์œผ๋กœ ๊ฐ€๋…์„ฑ์ด ๋งค์šฐ ๋–จ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, WITH๋ฅผ ์‚ฌ์šฉํ•ด์„œ node์˜ id๋งŒ์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•œ์ง€, ์˜๋ฌธ์ด ์ข€ ๋‚จ์Šต๋‹ˆ๋‹ค.
๐Ÿ”— ์—ฐ๊ด€ ์ง€์‹ ํ—ˆ๋ธŒ:๐Ÿ“‚ others ์นดํ…Œ๊ณ ๋ฆฌ#database#graphdb#neo4j

๐Ÿ’กRELATED ARTICLES ยท ํ•จ๊ป˜ ์ฝ์œผ๋ฉด ์ข‹์€ ์—ฐ๊ด€ ํฌ์ŠคํŠธ

๊ธ€ ์ฃผ์†Œ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.