This chapter explains label and relationship-type projection in the Neo4j Graph Algorithms library.

We can project the subgraph we want to run the algorithm on by using the label parameter to describe nodes, and relationship-type to describe relationships.

The general call syntax is:

The following will run the algorithm for the label `NodeLabel`

and relationship type `RelationshipType`

.

`CALL algo.<name>('NodeLabel', "RelationshipType", {config})`

For example, running the PageRank algorithm on DBpedia, which contains 11 million nodes and 116 million relationships:

The following will run the write version of the algorithm, storing results in the `pagerank`

property:

`CALL algo.pageRank('Page','Link',{iterations:5, dampingFactor:0.85, write: true, writeProperty:'pagerank'});`

The following will run the streaming version of the algorithm:

```
CALL algo.pageRank.stream('Page','Link',{iterations:5, dampingFactor:0.85})
YIELD nodeId, score
RETURN algo.getNodeById(nodeId).title, score
ORDER BY score DESC LIMIT 10;
```

If we want to project a subgraph that includes all nodes and relationships in the underlying Neo4j graph, we can achieve this
by passing `null`

values for the label and relationship type:

The following will run the algorithm over all nodes and relationships:

`CALL algo.<name>(null, null)`

The default label and relationship-type projection has a limitation of 2 billion nodes and 2 billion relationships, so if
our project graph is bigger than this we need to use a huge graph projection.
This can be enabled by setting `graph:'huge'`

in the config.

The general call syntax is:

`CALL algo.<name>('NodeLabel', "RelationshipType", {graph: "huge"})`

For example, running the PageRank algorithm on DBpedia:

The following will run the write version of the algorithm, storing results in the `pagerank`

property:

`CALL algo.pageRank('Page','Link',{iterations:5, dampingFactor:0.85, writeProperty:'pagerank',graph:'huge'});`

If we want to project a subgraph that includes all nodes and relationships in the underlying Neo4j graph, we can achieve this
by passing `null`

values for the label and relationship type:

The following will run the algorithm over all nodes and relationships:

`CALL algo.<name>(null, null, {graph: 'huge'})`