# Neo4J介紹
###### links
* https://jamboard.google.com/d/1pAHteH5f2QI3VIha0qpfTrDorZHKUyIPnCz1FUUNLg8/edit?usp=sharing
## https://neo4j.com/
## https://spark.apache.org/

## https://neo4j.com/labs/apoc/
## https://neo4j.com/docs/graph-data-science/current/
## Intro to cypher
```cypher!
match (n) return n
match (x:Person) return x
match (x:Movie) return x
return x
```
```
match(x:Person)
where x.name = "Tom Hanks"
return x
```
```
match(x:Person)-[]-(y)
where x.name = "Tom Hanks"
return x,y
```
```
match(x:Movie) where x.title="Apollo 13" return x
match(x:Movie)-[]-(y) where x.title="Apollo 13" return x,y
match(x:Movie)-[:ACTED_IN]-(y) where x.title="Apollo 13" return x,y
match(x:Movie)-[:DIRECTED]-(y) where x.title="Apollo 13" return x,y
match(x:Movie)-[:DIRECTED]-(y) where x.title="Apollo 13" return x,y
```
```
match(x:Person)-[]-(y)-[]-(z)
where x.name = "Tom Hanks"
return x,y,z
```
Kevin Bacon
```
match(x:Person)-[]-(y)-[]-(z)
where x.name = "Kevin Bacon"
return x,y,z
```
```
match(x:Person{name:"Tom Hanks"})-[]-(x_movie) return x,x_movie
match(x:Person{name:"Tom Hanks"})-[:ACTED_IN]-(x_movie) return x,x_movie
match(x:Movie{title:"Apollo 13"})<-[:DIRECTED]-(y) return y.name
match(x:Person{name:"Tom Hanks"})-[:ACTED_IN]->(co_movie)<-[:ACTED_IN]-(y) return x,co_movie,y
```
```
match(x:Movie{title:"Apollo 13"})-[r]-(y) return x.title,type(r),y.name
match (y)-[r]-(x:Movie{title:"Apollo 13"}) return x.title,type(r),y.name
match(x:Person{name:"Tom Hanks"})-[*1..2]-(y) return x,y
```
```
match(x:Person{name:"Kevin Bacon"}) return x
match(x:Person{name:"Meg Ryan"}) return x
MATCH p = shortestPath(
(x:Person{name:"Kevin Bacon"})-[*]-(y:Person{name:"Meg Ryan"})
) return p
```
```
CREATE
(alice:User {name: 'Alice'}),
(bridget:User {name: 'Bridget'}),
(charles:User {name: 'Charles'}),
(doug:User {name: 'Doug'}),
(mark:User {name: 'Mark'}),
(michael:User {name: 'Michael'}),
(alice)-[:FOLLOWS {score: 1}]->(doug),
(alice)-[:FOLLOWS {score: -2}]->(bridget),
(alice)-[:FOLLOWS {score: 5}]->(charles),
(mark)-[:FOLLOWS {score: 1.5}]->(doug),
(mark)-[:FOLLOWS {score: 4.5}]->(michael),
(bridget)-[:FOLLOWS {score: 1.5}]->(doug),
(charles)-[:FOLLOWS {score: 2}]->(doug),
(michael)-[:FOLLOWS {score: 1.5}]->(doug)
```
```
CALL gds.graph.project(
'myGraph1',
'User',
{
FOLLOWS: {
orientation: 'REVERSE',
properties: ['score']
}
}
)
```
```
CALL gds.degree.stream('myGraph1')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score AS followers
ORDER BY followers DESC, name DESC
```