Music Genre
Description
A node that identifies the genre and subgenre of a music artist. For artists that are musicians, adding genres greatly helps for festival and fairs and college booking where the buyers may look for particular musical styles.
Because we know the music touring applications will need to identify the artists (clients) under a genre, we will model the :MusicGenre.
In addition, an :EventSeries can also have genres applied to them. For example, an event series representing the EDC Las Vegas festival could be modelled as such:
Label
:MusicGenre
Properties
| Property | Description | Type |
|---|---|---|
| id | string | |
| name | the name of the genre; see table below | string |
| createdBy | the person or process that created the node | string |
| createdDate | dateTime | |
| modifiedBy | the person or process who last modified the node | string |
| modifiedDate | dateTime |
| Level 1 | Level 2 | Level 3 | Notes |
|---|---|---|---|
| Country | Americana | ||
| Contemporary Country | |||
| Traditional Country | |||
| Christian | Gospel | ||
| Classical | |||
| Electronic | Amapiano | ||
| Bass | Dubstep | ||
| Melodic Bass | |||
| Riddim | |||
| Trap | |||
| Breakbeat | |||
| Drum & Bass | |||
| EDM | |||
| Electronica | |||
| Garage | |||
| Hard Dance | |||
| House | Afro House | ||
| Commercial House | |||
| Tech House | |||
| Jungle | |||
| Techno | Hard Techno | ||
| Melodic Techno | |||
| Trance | |||
| Trip Hop | |||
| Hip-Hop / Rap | Grime | ||
| Jazz | |||
| Latin | |||
| Pop | Adult Contemporary | ||
| Dance | |||
| Disco | |||
| J-Pop | |||
| K-Pop | |||
| R&B | Funk | ||
| Reggae | |||
| Soul | |||
| Rock | Alternative | ||
| Blues | |||
| Classic Rock | |||
| Folk | |||
| Grunge | |||
| Hard Rock | |||
| Indie Rock | |||
| Metal | |||
| Metalcore | |||
| New Wave | |||
| Post Rock | |||
| Progressive | |||
| Psychedelic | |||
| Punk | |||
| Ska | |||
| World | Afrobeats | ||
| Celtic |
Key
name
Relationships
The HAS_MUSIC_GENRE relationship connects parties to music genres.
The SUBGENRE_OF relationship connects subgenres to their parent genres.
Examples
cypher
MATCH (root:MusicGenre)
CALL apoc.path.spanningTree(root, {
relationshipFilter: "<SUBGENRE_OF",
labelFilter: "+MusicGenre",
maxLevel: 10
})
YIELD path
RETURN path
```cypher [Visualize only the rock genre hierarchy]
MATCH (root:MusicGenre { name: "Rock"})
CALL apoc.path.spanningTree(root, {
relationshipFilter: "<SUBGENRE_OF",
labelFilter: "+MusicGenre",
maxLevel: 10
})
YIELD path
RETURN pathcypher
MATCH (g:MusicGenre)
WHERE NOT ( (g)-[:SUBGENRE_OF]->(:MusicGenre) )
RETURN g.name AS MusicGenrecypher
MATCH (subgenre:MusicGenre)-[:SUBGENRE_OF*]->(g:MusicGenre { name: "Rock"})
RETURN subgenre.name AS Subgenrecypher
MATCH (root:MusicGenre)
WHERE NOT (root)-[:SUBGENRE_OF]->()
OPTIONAL MATCH path = (sub:MusicGenre)-[:SUBGENRE_OF*]->(root)
WITH root, sub,
CASE WHEN sub IS NULL THEN 0 ELSE length(path) END as depth
WITH root.name as RootGenre,
collect({name: coalesce(sub.name, root.name), depth: depth}) as Hierarchy
RETURN {
RootGenre: RootGenre,
Hierarchy: [x IN Hierarchy WHERE x.name IS NOT NULL]
} as result
ORDER BY RootGenrejavascript