The Definitive Classical Music Experience, Part 1: Search

I'm writing a series of articles focusing on the fundamental elements of the definitive classical music experience we're pursuing. This is the first post in the series, on search.

Let's skip the lesson of evaluating the current search experiences of main classical music streaming services. If you're interested, read the review by Charlotte Gardner of Sinfini Music and try some if possible.

When designing a classical music (vertical) search engine, we have more opportunities to understand the semantics of search phrases. The ability to understand the semantics of search phrases accurately is the #1 factor when evaluating the design of a classical music search engine.

See if you're interested if a streaming service / app can understand the following queries:

  • Otto Klemperer's performances of Beethoven
  • Karajan's complete recordings on Deutsche Grammophon
  • Abbado and Argerich's Chopin Recordings
  • Bartok's Chamber Music

Our engine will try to probe dozens of rule-based semantics patterns before failover to full-text based (elastic) search on document representations of different entries.

If the above sentence doesn't make sense, just see below list to have a basic understanding of what you can search in the upcoming reference classical music app (tonal):

  • Pletnev Plays Prokofiev
  • Stravinsky Conducts Stravinsky
  • Beethoven Piano Concertos
  • Beethoven’s Eroica
  • Bernstein and Gould
  • Argerich Abbado Chopin
  • Vienna Philharmoniker Beethoven Concertos
  • Celibidache Munich Choir
  • Karajan Berliner Philharmoniker Bruckner
  • Horowitz complete recording on Deutsche Grammophon

Our goal is to recognize all semantics of unary, binary, and ternary relationships. I believe that's enough for the debut of our app.

Thank you and please provide your feedback. The initiative is a work in progress and your participation will change the classical music experience in the future!

For pioneer partners who want to integrate the definitive classical music experience into their products, I'll explain the search API briefly:

The endpoint is located at /search and takes one mandatory query parameter q= and two optional parameters per_page= and page= which default to 20 and 1 respectively. A search request looks like:

  • GET returns:
{ total: 4,
   [ { semantics: 'person',
       uri: 'Beethoven',
       line1: 'Ludwig van Beethoven (1770 – 1827)',
       line2: 'German Composer and Pianist',
       line3: null,
       picture: '' },
     { semantics: 'group',
       uri: 'Beethoven-Quartet',
       line1: 'Beethoven Quartet',
       line2: 'Russia based String Quartet founded in 1922',
       line3: null,
       picture: '' },
     { semantics: 'group',
       uri: 'Beethoven-Orchester-Bonn',
       line1: 'Beethoven Orchester Bonn',
       line2: 'Germany based Orchestra founded in 1907',
       line3: null,
       picture: null },
     { semantics: 'group',
       uri: 'Beethoven-Academie',
       line1: 'Beethoven Academie',
       line2: 'Chamber Orchestra founded in 1993',
       line3: null,
       picture: '' } ] }

The magic (and complexities, sorry) lies in semantics and uri. The uri is the suggested address for a web-based classical music app, while the semantics explains its meaning. Let's list all the possible structure of semantics with example uris:

  • person (the semantics key)
    • Mozart (the uri key)
    • Leopold_Mozart
  • group
    • Berliner_Philharmoniker
    • Hagen_Quartet
  • composer/genre
    • Beethoven/Symphonies
  • composer/work
    • Beethoven/Symphony_No._1
  • performer/role/composer
    • Horowitz/plays/Chopin
    • Karajan/conducts/Beethoven
  • performer/role/genre
    • Horowitz/plays/Concertos
  • performer/role/composer/genre
    • Horowitz/plays/Rachmaninov/Piano_Concertos
  • performer/with/performer
    • Argerich/with/Abbado
  • performer/role/composer/with/performer
    • Argerich/plays/Chopin/with/Abbado
  • performer/with/group
    • Abbado/with/Berliner_Philharmoniker
  • group/role/composer
    • Berliner_Philharmoniker/plays/Beethoven
  • group/role/genre
    • Berliner_Philharmoniker/plays/Concertos
  • group/role/composer/genre
    • Berliner_Philharmoniker/plays/Beethoven/Concertos
  • performer/role/composer/with/group
    • Argerich/plays/Chopin/with/Berliner_Philharmoniker
  • performers/recordings/label
    • Horowitz/recordings/Deutsche_Grammophon

The definitive search experience requires a well-designed hint (autocomplete) feature, which will document later.

Baoshan Sheng

I have a strong background in product and service design and development. I am determined to bring contemporary experience to classical music through metadata innovation.

Beijing, China