Capabilities & Scenarios (with Curl Examples) - Content Management
Capabilities & Scenarios (with Curl Examples)
Examples pipe to jq for readability.
A. Basic Unified Keyword Search with Highlighting
- Goal: Find entries matching "visual studio code" anywhere, show highlights.
- Capability: Unified search, Highlighting, Partial/Synonym matching.
- Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchUnifiedItem" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=visual studio code" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][addHighlight]=true" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq .
Response:
{
"totalCount": 42,
"objects": [
{
"object": { "id": "1_abc123", "name": "...", "objectType": "KalturaMediaEntry" },
"highlight": [{ "fieldName": "name", "hits": "<em>search term</em> in title" }],
"itemsData": [...]
}
],
"objectType": "KalturaESearchEntryResponse"
}
B. Field-Specific Search (Entry Name, Starts With)
- Goal: Find entries where the name starts with "AI Hacker".
- Capability: Field-specific search, Starts With matching.
- Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchEntryItem" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=AI Hacker" \-d "searchParams[searchOperator][searchItems][0][itemType]=3" \-d "searchParams[searchOperator][searchItems][0][fieldName]=name" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq .
C. Multi-Language Caption Search
- Goal: Find entries with the Chinese word 食谱 ("recipe") in captions.
- Capability: Multi-language, Field-specific search.
- 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]=食谱" \-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 .
D. Custom Metadata Search (Specific Field)
- Goal: Find entries where metadata profile ID 653 has the field
/metadata/Field1exactly matching "recipe". - Capability: Metadata search, XPath targeting, Exact Match.
- Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchEntryMetadataItem" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=recipe" \-d "searchParams[searchOperator][searchItems][0][itemType]=1" \-d "searchParams[searchOperator][searchItems][0][metadataProfileId]=$METADATA_PROFILE_ID" \-d "searchParams[searchOperator][searchItems][0][xpath]=/*[local-name()='metadata']/*[local-name()='Field1']" \-d "searchParams[searchOperator][searchItems][0][addHighlight]=true" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq .
E. Complex Logic (AND/NOT)
- Goal: Find entries with "strawberry" in the name AND which do NOT have "adding sugar" in the cue point text.
- Capability: Complex logic operators, Field-specific search, Cue point search.
- Structure: The top-level AND operator (
operator=1) combines two items: item 0 searches for "strawberry" in the name field, and item 1 is a nested NOT operator (operator=3) whose child item searches cue point text for "adding sugar". - Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][operator]=1" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchEntryItem" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][searchItems][0][fieldName]=name" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=strawberry" \-d "searchParams[searchOperator][searchItems][1][objectType]=KalturaESearchEntryOperator" \-d "searchParams[searchOperator][searchItems][1][operator]=3" \-d "searchParams[searchOperator][searchItems][1][searchItems][0][objectType]=KalturaESearchCuePointItem" \-d "searchParams[searchOperator][searchItems][1][searchItems][0][itemType]=1" \-d "searchParams[searchOperator][searchItems][1][searchItems][0][fieldName]=text" \-d "searchParams[searchOperator][searchItems][1][searchItems][0][searchTerm]=adding sugar" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq .
F. Date Range Search
- Goal: Find entries created between Jan 1, 2024 (1704067200) and Feb 1, 2024 (1706745600).
- Capability: Range searching on date fields.
- Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchEntryItem" \-d "searchParams[searchOperator][searchItems][0][itemType]=5" \-d "searchParams[searchOperator][searchItems][0][fieldName]=created_at" \-d "searchParams[searchOperator][searchItems][0][range][objectType]=KalturaESearchRange" \-d "searchParams[searchOperator][searchItems][0][range][greaterThanOrEqual]=1704067200" \-d "searchParams[searchOperator][searchItems][0][range][lessThan]=1706745600" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "format=1" | jq .
G. Aggregation & Sorting
- Goal: Find "visual studio code", aggregate by
media_type, sort bylast_played_at(desc). - Capability: Aggregation, Sorting.
- Important: The
orderByitems must use the concrete typeKalturaESearchEntryOrderByItemfor entry search (not the abstractKalturaESearchOrderByItem, which returnsOBJECT_TYPE_ABSTRACT). Similarly, theaggregationsarray is nested inside theaggregationscontainer:searchParams[aggregations][aggregations][0]. - Curl:
curl -X POST "$KALTURA_SERVICE_URL/service/elasticsearch_esearch/action/searchEntry" \-d "ks=$KALTURA_KS" \-d "searchParams[searchOperator][searchItems][0][objectType]=KalturaESearchUnifiedItem" \-d "searchParams[searchOperator][searchItems][0][searchTerm]=visual studio code" \-d "searchParams[searchOperator][searchItems][0][itemType]=2" \-d "searchParams[searchOperator][objectType]=KalturaESearchEntryOperator" \-d "searchParams[objectType]=KalturaESearchEntryParams" \-d "searchParams[aggregations][aggregations][0][objectType]=KalturaESearchEntryAggregationItem" \-d "searchParams[aggregations][aggregations][0][fieldName]=media_type" \-d "searchParams[aggregations][aggregations][0][size]=10" \-d "searchParams[orderBy][orderItems][0][objectType]=KalturaESearchEntryOrderByItem" \-d "searchParams[orderBy][orderItems][0][sortField]=last_played_at" \-d "searchParams[orderBy][orderItems][0][sortOrder]=desc" \-d "format=1" | jq .
Equivalent nested JSON (for SDK / agent integration):
{
"ks": "$KALTURA_KS",
"format": 1,
"searchParams": {
"objectType": "KalturaESearchEntryParams",
"searchOperator": {
"objectType": "KalturaESearchEntryOperator",
"operator": 2,
"searchItems": [{
"objectType": "KalturaESearchUnifiedItem",
"searchTerm": "visual studio code",
"itemType": 2
}]
},
"orderBy": {
"orderItems": [{
"objectType": "KalturaESearchEntryOrderByItem",
"sortField": "last_played_at",
"sortOrder": "desc"
}]
},
"aggregations": {
"aggregations": [{
"objectType": "KalturaESearchEntryAggregationItem",
"fieldName": "media_type",
"size": 10
}]
}
},
"pager": {"pageSize": 10}
}