Advanced Topics & Use Cases - Content Management
Advanced Topics & Use Cases
-
Aggregations (
searchParams[aggregations]):- Use Case: Get a summary view without retrieving all results, e.g., "Show me the count of videos vs. images matching 'tutorial'".
- How: Specify the field (e.g.,
KalturaESearchEntryAggregateByFieldName::MEDIA_TYPE) in aKalturaESearchEntryAggregationItemwithin thesearchParams. - Response: The
aggregationsarray in the response will contain buckets with counts for each media type found.
-
Searching Different Object Types:
- Use Case: Find categories tagged "Education" or users named "John Doe".
- How: Use the appropriate action (
searchCategory,searchUser,searchGroup) and the correspondingsearchParamstype (KalturaESearchCategoryParams,KalturaESearchUserParams,KalturaESearchGroupParams). The structure ofsearchOperatorandsearchItemsremains similar, but you use object-specific field names (e.g.,KalturaESearchCategoryFieldName::TAGS,KalturaESearchUserFieldName::FULL_NAME).
searchCategory example:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchCategory" \-d "ks=$KALTURA_KS" \-d "format=1" \-d "searchParams[objectType]=KalturaESearchCategoryParams" \-d "searchParams[searchOperator][objectType]=KalturaESearchCategoryOperator" \-d "searchParams[searchOperator][operator]=1" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCategoryItem" \-d "searchParams[searchOperator][searchItems][0][fieldName]=name" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=Education"searchUser example:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchUser" \-d "ks=$KALTURA_KS" \-d "format=1" \-d "searchParams[objectType]=KalturaESearchUserParams" \-d "searchParams[searchOperator][objectType]=KalturaESearchUserOperator" \-d "searchParams[searchOperator][operator]=1" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchUserItem" \-d "searchParams[searchOperator][searchItems][0][fieldName]=full_name" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=John"searchGroup example:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchGroup" \-d "ks=$KALTURA_KS" \-d "format=1" \-d "searchParams[objectType]=KalturaESearchGroupParams" \-d "searchParams[searchOperator][objectType]=KalturaESearchGroupOperator" \-d "searchParams[searchOperator][operator]=1" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchGroupItem" \-d "searchParams[searchOperator][searchItems][0][fieldName]=screen_name" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=Engineering"All four actions (
searchEntry,searchCategory,searchUser,searchGroup) return the same response structure:{ objects: [...], totalCount, objectType }. Each object is wrapped in{ object, itemsData, highlight }. -
Caption Timestamps for Clip Playback:
- Use Case: "Play the part where they discuss training programs" — find the exact timestamp range within a video.
- How: Use
KalturaESearchCaptionItemwithfieldName=content,addHighlight=true. The response'sitemsData[].items[]array containsKalturaESearchCaptionItemDataobjects withstartsAtandendsAtfields (integers in milliseconds). Use the first match'sstartsAtas clip start and the last match'sendsAtas clip end. Divide by 1000 to get seconds. - Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchCaptionItem" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=training programs" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][fieldName]=content" \-d "searchParams[searchOperator][searchItems][0][addHighlight]=true" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq '.objects[0].itemsData[] | select(.itemsType=="caption") | .items[] | {startsAt, endsAt, content}'
- Response excerpt:
{"startsAt": 16700, "endsAt": 20600, "content": "...training programs..."}— clip from 16.7s to 20.6s.
-
Nested Queries:
- Use Case: Combining complex AND/OR/NOT logic as shown in Scenario E.
- How: Place a
KalturaESearchEntryOperator(or similar) within thesearchItemsarray of another operator. This allows nesting conditions (e.g.,A AND (B OR (NOT C))).