---
title: Capabilities & Scenarios (with Curl Examples)
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-management/esearch-capabilities-scenarios-with-curl-examples
---

## 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:**
    ```bash
    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:**

```json
{
  "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:**
    ```bash
    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:**
    ```bash
    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/Field1` exactly matching "recipe".
* **Capability:** Metadata search, XPath targeting, Exact Match.
* **Curl:**
    ```bash
    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:**
    ```bash
    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:**
    ```bash
    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 by `last_played_at` (desc).
* **Capability:** Aggregation, Sorting.
* **Important:** The `orderBy` items must use the concrete type `KalturaESearchEntryOrderByItem` for entry search (not the abstract `KalturaESearchOrderByItem`, which returns `OBJECT_TYPE_ABSTRACT`). Similarly, the `aggregations` array is nested inside the `aggregations` container: `searchParams[aggregations][aggregations][0]`.
* **Curl:**
    ```bash
    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):**

```json
{
  "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}
}
```
