---
Title: Ingest documents
URL Source: https://company-skill.com/p/es/es-ingest-documents
Language: en
Description: You need to import, update, or delete structured or vector-based documents in an Elasticsearch (OpenSearch) index, possibly at scale, with or without code, and potentially with transaction-like…
---

# Ingest documents

Part of **Elasticsearch**. Route queries via `POST https://company-skill.com/api/route`.

## What You Want to Do

You need to import, update, or delete structured or vector-based documents in an Elasticsearch (OpenSearch) index, possibly at scale, with or without code, and potentially with transaction-like control over when changes become visible.

- How do I push documents to an OpenSearch index?
- Can I stage changes before committing?

## Decision Tree

Pick the best path for your situation:

- **If** you require high-throughput writes (up to **100 QPS**) or need to mix **ADD**, **UPDATE**, and **DELETE** operations with precise control → Use API (go to *es/es-document*)
- **If** you are developing in **C#** and want a working **C# SDK** example with guidance from the **console** under **Apps > Tables > Push Documents** → Use SDK C# (go to *es/es-document*)
- **If** you are using **Vector Search Edition** and only need to manually insert **<1000 documents** via **Data Management > Insert Data** in the **console** for testing → Use (go to *es/es-vector-search*)
- **Otherwise (default)** → Start with ** API ** — it’s the only path that supports production-scale, automated, and transaction-aware ingestion.

## Path Comparison

| Path | Best For | Complexity | Code Required | Automation | Key Fact | Detail Skill |
|------|----------|------------|---------------|------------|----------|-------------|
| API | high | Yes | Yes | Supports up to 100 QPS per application | `es/api/es-document` |
| SDK C# | SDK | medium | Yes | Yes | Limited to ~10 requests/second via C# SDK | `es/guide/es-document` |
| Console / Dashboard | low | No | No | Max 1000 docs per request, 10 requests/minute | `es/guide/es-vector-search` |

## Path Details

### Path 1: API 

**Brief Description**: This approach uses Elasticsearch/OpenSearch REST APIs or SDKs to perform **push**, **add**, **update**, or **delete** operations programmatically. It supports batching and staged commits (e.g., **add** followed by explicit **commit**), giving fine-grained control over when changes become searchable.

**Key technical facts**:
- Billing: API 
- Auth method: AccessKey ID Secret or SDK Authorization: Bearer $DASHSCOPE_API_KEY
- Regions available: cn-hangzhou, cn-shanghai, ap-southeast-1
- Prerequisites: OpenSearch , RAM AliyunServiceRoleForOpenSearch , ALIBABA_CLOUD_ACCESS_KEY_ID ALIBABA_CLOUD_ACCESS_KEY_SECRET 

**When to Use**:
- 100 QPS

### Path 2: SDK C# 

**Best For**: C#SDK 

**Brief Description**: Navigate via the **console** to **OpenSearch > Apps > [App Name] > Tables > Push Documents** to access context and a **C# SDK** integration guide. You must configure **AccessKey** credentials via **environment variables** and use the SDK to send document payloads.

**Key technical facts**:
- Billing: 
- Auth method: AccessKey ID Secret 
- Prerequisites: OpenSearch , C# , ALIBABA_CLOUD_ACCESS_KEY_ID ALIBABA_CLOUD_ACCESS_KEY_SECRET , RAM 

**When to Use**:
- C#SDK 
- C# 

**When NOT to Use**:
- C# 
- >10 QPS

### Path 3: Console / Dashboard
**Brief Description**: In **Vector Search Edition**, use the **console** to go to **Data Management**, then click **Insert Data**. You can enter values in **Table Fields** mode or switch to **Developer Mode** to paste raw JSON with explicit **Document ID**. Click **Submit** to insert.

**Key technical facts**:
- Billing: 
- Auth method: SSO 
- Prerequisites: OpenSearch Vector Search , 

**When NOT to Use**:
- >10 /

## FAQ

Q: Which path should I start with?
A: If you're building a production system or need automation, start with ** API **. If you're just testing vector search with a few samples, use the **console Data Management** path.

Q: What if I need to update existing documents frequently but chose the console path?
A: You’ll hit a major limitation: the **Vector Search Edition console does not support direct UPDATE**—you must **delete** the old document and **re-insert** it with the same **Document ID**, which is error-prone and inefficient at scale.

Q: What if I’m using Python (not C#) but followed the C# SDK guide?
A: You’ll find the **C# SDK** examples unusable, and the **Push Documents** link in the **console** won’t provide Python code. You’d be better off using the generic **API path** with a Python OpenSearch client.

Q: Can I use the console path for production data ingestion?
A: No—you’re capped at **10 Insert Data requests per minute**, and there’s **no automation or rollback**. Attempting this in production will cause severe throughput bottlenecks.

Q: Does the API path support all regions?
A: It’s confirmed available in **cn-hangzhou, cn-shanghai, and ap-southeast-1**. Other regions may vary—check your instance’s region compatibility.

Q: What happens if I exceed the 100 QPS limit in the API path?
A: Requests will be throttled. Design your ingestion pipeline with retries and backoff, or shard across multiple applications if needed.

Q: Do I need to set environment variables for all paths?
A: Only the **API** and **C# SDK** paths require **ALIBABA_CLOUD_ACCESS_KEY_ID** and **ALIBABA_CLOUD_ACCESS_KEY_SECRET** as **environment variables**. The **console** path uses SSO login and needs no credential setup.

## Related queries

ingest documents, push documents, bulk upload, batch insert, document management, how to push data to elasticsearch, add update delete documents, stage changes before commit, chunked upload large files, vector data insert, console data management, C# SDK example, use AccessKey for OpenSearch, set en

---
Part of [Elasticsearch](https://company-skill.com/p/es.md) · https://company-skill.com/llms.txt
