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-statementinstead of the label parameterrelationship-statementinstead of the relationship typegraph:'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๋ง์ ๋ฆฌ์คํธ๋ก ๋๊ธฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง, ์๋ฌธ์ด ์ข ๋จ์ต๋๋ค.