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
http://api.icmd.org/search?q=Beethoven
returns:
{ total: 4,
items:
[ { semantics: 'person',
uri: 'Beethoven',
line1: 'Ludwig van Beethoven (1770 – 1827)',
line2: 'German Composer and Pianist',
line3: null,
picture: 'http://dfcc9fq6tuc31.cloudfront.net/l/QpX.jpg' },
{ semantics: 'group',
uri: 'Beethoven-Quartet',
line1: 'Beethoven Quartet',
line2: 'Russia based String Quartet founded in 1922',
line3: null,
picture: 'http://dfcc9fq6tuc31.cloudfront.net/l/S7b.jpg' },
{ 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: 'http://dfcc9fq6tuc31.cloudfront.net/l/TVk.jpg' } ] }
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 uri
s:
person
(thesemantics
key)Mozart
(theuri
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.