Tous les produits
Search
Centre de documentation

OpenSearch:Compound data types

Dernière mise à jour :Aug 10, 2026

L'édition Industry Algorithm prend en charge deux types de données composites : OBJECT et NESTED. Ces types vous permettent de combiner plusieurs champs au sein d'une structure imbriquée. Une utilisation correcte des types composites améliore la précision des requêtes, évite les erreurs de correspondance et optimise la gestion des données complexes.

Notes d'utilisation

Les types OBJECT et NESTED acceptent des données JSON ayant la même structure et possèdent des configurations de base similaires. Cependant, leur comportement lors des requêtes diffère fondamentalement. Le type NESTED préserve les limites des objets, tandis que le type OBJECT aplatit les données.

Type

OBJECT

NESTED

Méthode de stockage sous-jacente

Stockage aplati, ce qui entraîne la perte des limites des objets. Par exemple :{ "user": [{"name":"Alice","age":30}, {"name":"Bob","age":25}] } est stocké sous la forme :user_name: ["Alice", "Bob"]user_age: [30, 25]

Utilise un stockage indépendant pour les documents parents et enfants, préservant ainsi l'intégrité des objets.

Sémantique des requêtes

Des correspondances croisées entre objets peuvent se produire, mais les performances sont meilleures. Exemple : user_name: "Alice" AND user_age: 25

Cela peut faire correspondre différents objets utilisateur : Alice (âge 30) et Bob (âge 25).

La correspondance est strictement limitée à un seul objet. Exemple : user_name: "Alice" AND user_age: 30

Seul l'objet utilisateur où name="Alice" et age=30 correspond.

Limitations

Les champs internes des types OBJECT et NESTED sont aplatis par niveau, et les niveaux sont joints par des traits de soulignement. Vous pouvez configurer ces champs dans le schéma d'index et en tant que champs de propriété.

  • L'édition Industry Algorithm impose les limites suivantes pour les champs OBJECT et NESTED :

    • Le nombre total de champs ne peut pas dépasser 10.

    • La profondeur d'imbrication maximale est de 5 niveaux.

    • Le champ lui-même ne peut pas être une propriété.

    • Les autres champs au même niveau ne peuvent pas avoir de noms commençant par le préfixe {OBJECT_field_name}_ ou {NESTED_field_name}_. Par exemple, si un champ OBJECT est nommé abc, un autre champ au même niveau ne peut pas être nommé abc_d.

    • Seules les applications Dedicated sont prises en charge.

  • Les champs internes des types OBJECT et NESTED ont les limitations suivantes :

    • Les analyseurs vectoriels ne sont pas pris en charge.

    • Vous ne pouvez pas les configurer comme champ de routage, champ de tri d'index inversé ou namespace d'index vectoriel.

    • Les index composites ne sont pas pris en charge.

    • Le nom de l'index créé doit être identique au nom du champ.

    • Les expressions de tri ne sont pas prises en charge.

    • Vous ne pouvez pas les configurer comme champ d'affichage.

    • Vous ne pouvez pas les configurer comme champ d'entraînement de modèle.

Exemples

Création d'application

Pour plus d'informations sur la syntaxe, consultez Schéma.

{
  "name": "json_nested",
  "type": "NESTED",
  "primaryKey": false,
  "innerSchema": {
    "job": {
      "name": "job",
      "type": "TEXT",
      "primaryKey": false
    },
    "ssn": {
      "name": "ssn",
      "type": "LITERAL",
      "primaryKey": false
    }
  }
}

Champ

Type

Description

type

String

Le type de données du champ. Pour plus de détails sur les champs, consultez Schéma d'application.

name

String

Le nom du champ.

primaryKey

Boolean

Indique si le champ est une clé primaire.

joinWith

Array

La collection de tables de données à joindre.

innerSchema

Object

Spécifie la structure des données lorsque le type de champ est OBJECT ou NESTED. L'imbrication est prise en charge.

Push de données

Pour un type OBJECT, la valeur du champ est une chaîne JSON.

[
    {
        "cmd": "add",
        "timestamp": 1401342874777,
        "fields": {
            "id": "1",
            "title": "This is the title",
            "json_nested": "[{\"job\":\"Other\",\"ssn\":\"abc\"}]"
        }
    },
    {
        "cmd": "update",
        "timestamp": 1401342874778,
        "fields": {
            "id": "1",
            "json_nested": "{\"job\":\"Security Officer\",\"ssn\":\"abc\"}" // Can be a single object
        }
    },
    {
        "cmd": "delete",
        "fields": {
            "id": "1"
        }
    }
]

Recherche

  • L'utilisation des index pour les champs internes des types OBJECT et NESTED est identique à celle des champs standard.

  • Pour filtrer par un champ interne d'un type NESTED, ajoutez sub_doc:group ou sub_doc:flat à la clause config.

  • Pour trier par un champ interne d'un type NESTED, ajoutez sub_doc:flat à la clause config.

Exemple :

query=json_nested_job:'Other'&&filter=json_nested_ssn="abc"&&sort=json_nested_ssn;-RANK&&config=sub_doc:flat
Remarque

Le mode sub_doc:flat offre des performances légèrement inférieures à celles du mode sub_doc:group.