Skip to main content
View as Markdown

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 a KalturaESearchEntryAggregationItem within the searchParams.
    • Response: The aggregations array 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 corresponding searchParams type (KalturaESearchCategoryParams, KalturaESearchUserParams, KalturaESearchGroupParams). The structure of searchOperator and searchItems remains 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 KalturaESearchCaptionItem with fieldName=content, addHighlight=true. The response's itemsData[].items[] array contains KalturaESearchCaptionItemData objects with startsAt and endsAt fields (integers in milliseconds). Use the first match's startsAt as clip start and the last match's endsAt as 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 the searchItems array of another operator. This allows nesting conditions (e.g., A AND (B OR (NOT C))).