Skip to main content
View as Markdown

Caption Search - Content Management

eSearch with KalturaESearchCaptionItem​

Search within caption text across entries:

curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \
-d "ks=$KALTURA_KS" \
-d "format=1" \
-d "searchParams[objectType]=KalturaESearchEntryParams" \
-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \
-d "searchParams[searchOperator][operator]=1" \
-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCaptionItem" \
-d "searchParams[searchOperator][searchItems][0][fieldName]=content" \
-d "searchParams[searchOperator][searchItems][0][searchTerm]=Kaltura API" \
-d "searchParams[searchOperator][searchItems][0][itemType]=2"

Searchable fields: caption_asset_id, content, start_time, end_time, label, language

Item types: 1 = EXACT_MATCH, 2 = PARTIAL, 3 = STARTS_WITH

Response Data​

Search results include KalturaESearchCaptionItemData with timestamp information:

FieldDescription
lineMatched caption text
startsAtStart timestamp (integer, milliseconds)
endsAtEnd timestamp (integer, milliseconds)
captionAssetIdCaption asset containing the match
labelCaption track label
languageCaption language

Combine caption search with entry fields and metadata in a single eSearch query:

curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \
-d "ks=$KALTURA_KS" \
-d "format=1" \
-d "searchParams[objectType]=KalturaESearchEntryParams" \
-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \
-d "searchParams[searchOperator][operator]=2" \
-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCaptionItem" \
-d "searchParams[searchOperator][searchItems][0][fieldName]=content" \
-d "searchParams[searchOperator][searchItems][0][searchTerm]=tutorial" \
-d "searchParams[searchOperator][searchItems][0][itemType]=2" \
-d "searchParams[searchOperator][searchItems][1][objectType]=KalturaESearchEntryItem" \
-d "searchParams[searchOperator][searchItems][1][fieldName]=name" \
-d "searchParams[searchOperator][searchItems][1][searchTerm]=tutorial" \
-d "searchParams[searchOperator][searchItems][1][itemType]=2"

Operator 2 = OR (match entries where captions OR title contain "tutorial"). See eSearch API for full query syntax.

Deep-Linking to Video Moments​

Use startsAt from caption search results to deep-link to the exact video position. Since startsAt is in milliseconds and the player expects seconds, divide by 1000:

https://player.kaltura.com/p/{partnerId}/sp/{partnerId}00/embedIframeJs/uiconf_id/{playerId}/partner_id/{partnerId}?iframeembed=true&entry_id={entryId}&mediaProxy.mediaPlayFrom={startsAt/1000}

Or use the Player JS API: player.currentTime = startsAt / 1000;