Caption Search - Content Management
Caption Search
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:
| Field | Description |
|---|---|
line | Matched caption text |
startsAt | Start timestamp (integer, milliseconds) |
endsAt | End timestamp (integer, milliseconds) |
captionAssetId | Caption asset containing the match |
label | Caption track label |
language | Caption language |
Unified Search
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;