Pousse des documents par lots vers une application OpenSearch. Utilisez l'API de documents en bloc pour ajouter, mettre à jour et supprimer des documents dans une seule requête, réduisant ainsi la surcharge réseau et améliorant le débit d'indexation.
Téléchargement de documents
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une application OpenSearch avec au moins une table de réception de données
Le nom de l'application et le nom de la table cible
Une signature de requête valide — consultez le Mécanisme de signature de l'API V3 pour savoir comment calculer les chaînes de signature et configurer les en-têtes de requête
Endpoint
POST /v3/openapi/apps/<app_name>/<table_name>/actions/bulk
Remplacez <app_name> par le nom de votre application et <table_name> par le nom de la table de réception de données. L'URL n'inclut pas l'adresse hôte ni les en-têtes de requête.
Format du corps de la requête
Le corps de la requête est un tableau JSON. Chaque élément représente une opération sur un document. L'envoi de plusieurs opérations dans une seule requête réduit les appels réseau et accélère l'indexation — effectuez des traitements par lots chaque fois que possible.
Exemple pour l'édition Premium :
[
{
"cmd": "add",
"timestamp": 1401342874777,
"fields": {
"id": "1",
"title": "This is the title",
"body": "This is the body"
}
},
{
"cmd": "update",
"timestamp": 1401342874778,
"fields": {
"id": "2",
"title": "This is the new title"
}
},
{
"cmd": "delete",
"fields": {
"id": "3"
}
}
]
Champs
| Champ | Obligatoire | Description |
|---|---|---|
cmd |
Oui | L'opération à effectuer. Consultez la section Opérations. |
fields |
Oui | Les champs du document. Le champ de clé primaire est toujours obligatoire. Pour l'opération delete, seule la clé primaire est nécessaire. |
timestamp |
Non | L'horodatage de l'opération en millisecondes. OpenSearch l'utilise pour résoudre les conflits d'ordre lorsque plusieurs opérations ciblent la même clé primaire. S'il est omis, OpenSearch utilise l'heure de réception de la requête. Uniquement pour l'édition Premium — l'édition Standard renvoie le code d'erreur 4007 si ce champ est défini. |
Opérations
Choisissez la valeur cmd en fonction du comportement d'idempotence dont vous avez besoin :
Valeur cmd |
Comportement | Support par édition |
|---|---|---|
add |
Ajoute un document. Si un document avec la même clé primaire existe déjà, le document existant est supprimé avant l'ajout du nouveau. | Premium et Standard |
delete |
Supprime le document avec la clé primaire spécifiée. Si aucun document correspondant n'existe, l'opération est tout de même considérée comme réussie. | Premium et Standard |
update |
Met à jour des champs spécifiques du document avec la clé primaire spécifiée. | Uniquement Premium |
upsert |
Met à jour le document si la clé primaire existe ; sinon, ajoute un nouveau document. | Uniquement Premium |
L'édition Standard ne prend pas en charge les opérationsupdateniupsert.
Pour les champs de type tableau, utilisez une valeur de tableau JSON :
[{"cmd": "add", "fields": {"id": "0", "int_array": [14, 85], "string_array": ["abc", "xyz"]}}]
Exemple
Requête (en-têtes et encodage omis) :
POST http://<host>/v3/openapi/apps/app_schema_demo/tab/actions/bulk
[{"cmd":"ADD","fields":{"id":1,"name":"Test Data Push"}}]
Réponse réussie :
{
"errors": [],
"request_id": "150116724719940316170289",
"status": "OK",
"result": true
}
Réponse d'erreur :
{
"errors": [
{
"code": 2001,
"message": "The application to be managed does not exist. The application to be managed does not exist.",
"params": {
"friendly_message": "The application to be managed does not exist."
}
}
],
"request_id": "150116732819940316116461",
"status": "FAIL"
}
Champs de réponse
| Champ | Type | Description |
|---|---|---|
status |
string | OK si la requête a été reçue ; FAIL si elle a été rejetée. |
result |
string | true pour les requêtes réussies. Non renvoyé pour les requêtes ayant échoué. |
request_id |
string | L'ID de la requête, utilisé pour le dépannage. |
errors |
array | Détails de l'erreur lorsque status est FAIL. Chaque objet d'erreur contient code (code d'erreur), message (description de l'erreur) et params (paramètres supplémentaires). Consultez les Codes d'erreur. |
Notes d'utilisation
Traitement asynchrone
status: OK signifie qu'OpenSearch a reçu la requête, mais pas que les documents ont été indexés. OpenSearch traite les données de manière asynchrone. Vérifiez régulièrement la console OpenSearch pour détecter les erreurs de traitement, et portez une attention particulière au code d'erreur 3007.
Limite de taille de la requête
La taille maximale du corps de la requête avant encodage est de 2 Mo. OpenSearch rejette les requêtes qui dépassent cette limite.
Encodage du corps de la requête
Si le corps de la requête contient des caractères chinois, encodez-le en UTF-8. Calculez la valeur de l'en-tête Content-MD5 en fonction du corps encodé en UTF-8. Les requêtes qui ne respectent pas cette exigence échoueront.
Sensibilité à la casse des noms de champs
Les noms de champs ne sont pas sensibles à la casse lors de la poussée de données via l'API ou le SDK.
Limites de fréquence et de taille
Les limites de fréquence et de taille de poussée de données varient selon le type d'application. Consultez les Limites système.
Gestion des erreurs
Vérifiez toujours la valeur de retour après le téléchargement des données. Dépannez rapidement les codes d'erreur pour éviter toute perte de données.