Skip to content

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

PropertyDescriptionType
idstring
namethe name of the genre; see table belowstring
createdBythe person or process that created the nodestring
createdDatedateTime
modifiedBythe person or process who last modified the nodestring
modifiedDatedateTime
Level 1Level 2Level 3Notes
CountryAmericana
Contemporary Country
Traditional Country
ChristianGospel
Classical
ElectronicAmapiano
BassDubstep
Melodic Bass
Riddim
Trap
Breakbeat
Drum & Bass
EDM
Electronica
Garage
Hard Dance
HouseAfro House
Commercial House
Tech House
Jungle
TechnoHard Techno
Melodic Techno
Trance
Trip Hop
Hip-Hop / RapGrime
Jazz
Latin
PopAdult Contemporary
Dance
Disco
J-Pop
K-Pop
R&BFunk
Reggae
Soul
RockAlternative
Blues
Classic Rock
Folk
Grunge
Hard Rock
Indie Rock
Metal
Metalcore
New Wave
Post Rock
Progressive
Psychedelic
Punk
Ska
WorldAfrobeats
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  path
cypher
MATCH      (g:MusicGenre)
WHERE NOT  ( (g)-[:SUBGENRE_OF]->(:MusicGenre) )
RETURN     g.name AS MusicGenre
cypher
MATCH      (subgenre:MusicGenre)-[:SUBGENRE_OF*]->(g:MusicGenre { name: "Rock"})
RETURN     subgenre.name AS Subgenre
cypher
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      RootGenre
javascript

Confidential. For internal use only.