All TalkSearch records follow the same schema of nested keys. Each top key
contains informations regarding a specific aspect of the result, such as the
channel
, playlist
, video
or even speakers
or caption
. Use this page as
a reference to see what each key contains.
Note: If you're using TalkSearch.js, you shouldn't have to worry about any of those. It's all already handled in the template for you.
Here is an example of a full record:
{
"objectID": "11d227100f19d6d54a226221905845845f194d208a87876e60da9832f38f2ca8",
"channel": {
"id": "UCSRhwaM00ay0fasnsw6EXKA",
"title": "dotconferences"
},
"conference": {
"year": 2012,
"name": "dotJS"
},
"playlist": {
"description": "Our first dotConference on November 30th , 2012.",
"id": "PLMW8Xq7bXrG77SV1VAAiAciRyq3VSC2Gq",
"title": "dotJS 2012"
},
"video": {
"description": "Filmed in Paris on Nov 30th, 2012.",
"duration": {
"minutes": 26,
"seconds": 33
},
"hasCaptions": true,
"hasManualCaptions": false,
"id": "UIDb6VBO9os",
"popularity": {
"comments": 81,
"dislikes": 70,
"favorites": 0,
"likes": 788,
"views": 66798,
"score": 67737
},
"positionInPlaylist": 15,
"publishedDate": {
"year": 1356994800,
"month": 1356994800,
"day": 1358377200,
"timestamp": 1358460292
},
"thumbnails": {
"default": {
"height": 90,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/default.jpg",
"width": 120
},
"high": {
"height": 360,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/hqdefault.jpg",
"width": 480
},
"maxres": {
"height": 720,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/maxresdefault.jpg",
"width": 1280
},
"medium": {
"height": 180,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/mqdefault.jpg",
"width": 320
},
"standard": {
"height": 480,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/sddefault.jpg",
"width": 640
}
},
"title": "What Is Open Source & Why Do I Feel So Guilty?",
"url": "https://www.youtube.com/watch?v=UIDb6VBO9os"
},
"speakers": [
{
"name": "Fat"
}
],
"caption": {
"content": "asked to come and talk to you guys and I was like super excited",
"duration": 4.02,
"start": 30,
"position": 6,
"url": "https://www.youtube.com/watch?v=UIDb6VBO9os&t=30s"
}
}
The channel
key contains data relative to the YouTube channel. You can think
of a channel more or less as a YouTube user.
It contains two keys, id
and title
. Those are extracted directly from
the YouTube API.
{
"channel": {
"id": "UCSRhwaM00ay0fasnsw6EXKA",
"title": "dotconferences"
}
}
The playlist
key contains data relative to the YouTube playlist defined in the
config.
It contains a description
, id
and title
key, all extracted from the YouTube API.
{
"playlist": {
"description": "Our first dotConference on November 30th , 2012.",
"id": "PLMW8Xq7bXrG77SV1VAAiAciRyq3VSC2Gq",
"title": "dotJS 2012"
}
}
The video
key is the one that contains the most information, so let's break it
down:
description
, id
, title
, positionInPlaylist
and url
are all coming
straight from YouTube.
duration.minutes
and duration.seconds
can be used to display the total time
of the video.
hasCaptions
is set to true
when YouTube had captions available for this
video. YouTube adds automatic captioning to most of the videos, but sometimes
they might not have been processed yet. hasManualCaptions
is set to true when
some captions weren't automatic but manually added by. Those captions are of
much higher quality.
The popularity
key contains a breakdown of the number of views, likes,
dislikes, comments and favorites this video had. A (naive) score
is computed
by adding all those values together and is used in the ranking.
The publishedDate
contains the publishing date of the video in various
formats, for your convenience. The .timestamp
subkey contains the exact
second, while day
, month
and year
contains rounded values. All those
values can be used for filtering.
Finally, the thumbnails
key contains the video thumbnail at different
resolutions, along with the dimensions.
{
"video": {
"description": "Filmed in Paris on Nov 30th, 2012.",
"duration": {
"minutes": 26,
"seconds": 33
},
"hasCaptions": true,
"hasManualCaptions": false,
"id": "UIDb6VBO9os",
"popularity": {
"comments": 81,
"dislikes": 70,
"favorites": 0,
"likes": 788,
"views": 66798,
"score": 67737
},
"positionInPlaylist": 15,
"publishedDate": {
"year": 1356994800,
"month": 1356994800,
"day": 1358377200,
"timestamp": 1358460292
},
"thumbnails": {
"default": {
"height": 90,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/default.jpg",
"width": 120
},
"high": {
"height": 360,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/hqdefault.jpg",
"width": 480
},
"maxres": {
"height": 720,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/maxresdefault.jpg",
"width": 1280
},
"medium": {
"height": 180,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/mqdefault.jpg",
"width": 320
},
"standard": {
"height": 480,
"url": "https://i.ytimg.com/vi/UIDb6VBO9os/sddefault.jpg",
"width": 640
}
},
"title": "What Is Open Source & Why Do I Feel So Guilty?",
"url": "https://www.youtube.com/watch?v=UIDb6VBO9os"
}
}
The caption
contains information about the current matching caption.
If no caption is actually matching (for example if you're doing an empty query),
then the first caption of the video will be used.
The .content
key contains the actual caption and the url
will give a direct
link to the moment in the video matching this caption.
position
contains the index of the caption (first caption of the video will
have a value of 0
). start
and duration
will give you more context about
the caption itself.
{
"caption": {
"content": "asked to come and talk to you guys and I was like super excited",
"duration": 4.02,
"start": 30,
"position": 6,
"url": "https://www.youtube.com/watch?v=UIDb6VBO9os&t=30s"
}
}
The conference
key contains data relative to the conference event itself. This
data is guessed from the playlist name, but can be overwritten in each
individual config if needed.
It contains a year
and name
key. Both those keys can be used for
faceting.
{
"conference": {
"year": 2012,
"name": "dotJS"
}
}
The speakers
key contains the list of identified speakers in the video. Note
that YouTube does not provide this information so we fallback to some NLP on the
video titles, but this might not be 100% accurate.
If your video titles contain the speaker name, it can be extracted from there instead, which yields much better results (but requires all your titles to follow the same pattern).
{
"speakers": [
{
"name": "Fat"
}
]
}
The objectID
contains a unique identifier for each record, used internally for
indexing. You shouldn't have to worry about this one.
All search results are returned with a key called _highlightResult. This key is dynamic and based on the input search keyword.
It will contain highlighted versions of the matching elements in the response.
For example, when searching for source
in the above record, you can have the
highlighted version of the title through _highlightResult.video.title.value
.
The matching words will be wrapped in <em>
tags by default, but you can use
any HTML tag through the use of highlightPreTag and highlightPostTag
options.