

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Administración de la indexación de objetos
<a name="managing-index"></a>

El índice creado para todos sus objetos es `AWS_Things`. Puede controlar qué indexar de los siguientes orígenes de datos: datos de [registro de AWS IoT](thing-registry.md), datos de [AWS IoT Device Shadow](iot-device-shadows.md), datos de [conectividad de AWS IoT](life-cycle-events.md) y datos de infracciones de [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html).

**Topics**
+ [Habilitación de la indexación de objetos](#enable-index)
+ [Descripción de un índice de objeto](#describe-index)
+ [Consulta de un índice de objeto](#search-index)
+ [Restricciones y limitaciones](#index-limitations)
+ [Autorización](#query-auth)

## Habilitación de la indexación de objetos
<a name="enable-index"></a>

Utilice el comando [update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html)CLI o la operación [UpdateIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateIndexingConfiguration.html)API para crear el `AWS_Things` índice y controlar su configuración. Utilizando el parámetro `--thing-indexing-configuration` (`thingIndexingConfiguration`), controla qué tipo de datos se indexan (por ejemplo, registro, sombra, datos de conectividad del dispositivo y datos de infracciones de Device Defender). 

El parámetro `--thing-indexing-configuration` toma una cadena con la siguiente estructura:

```
{
  "thingIndexingMode": "OFF"|"REGISTRY"|"REGISTRY_AND_SHADOW",
  "thingConnectivityIndexingMode": "OFF"|"STATUS",
  "deviceDefenderIndexingMode": "OFF"|"VIOLATIONS",
  "namedShadowIndexingMode": "OFF"|"ON",
  "managedFields": [
    {
      "name": "string",
      "type": "Number"|"String"|"Boolean"
    }, 
    ...
  ], 
  "customFields": [
    { 
      "name": "string",
      "type": "Number"|"String"|"Boolean" 
    },
    ...
  ],
  "filter": {
     "namedShadowNames": [ "string" ],
     "geoLocations": [
        {
            "name": "String",
            "order": "LonLat|LatLon"
        }
    ]
  }
}
```

### Modos de indexación de objetos
<a name="index-mode"></a>

Puede especificar distintos modos de indexación en su configuración de indexación, en función de los orígenes de datos que desee indexar y de los dispositivos desde los que desee buscar: 
+ `thingIndexingMode`: controla si el registro o la sombra están indexados. Cuando `thingIndexingMode` se establece en `OFF`, la indexación de objetos está desactivada.
+ `thingConnectivityIndexingMode`: especifica si los datos de conectividad de objetos están indexados.
+ `deviceDefenderIndexingMode`: especifica si los datos de infracciones de Device Defender están indexados.
+ `namedShadowIndexingMode`: especifica si los datos ocultos con nombre están indexados. Para seleccionar sombras con nombre y agregarlas a la configuración de indexación de su flota, establezca `namedShadowIndexingMode` en `ON` y especifique los nombres de las sombras con nombre en [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

La siguiente tabla muestra los valores válidos para cada modo de indexación y el origen de datos que está indexado para cada valor.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/managing-index.html)

### Campos administrados y campos personalizados
<a name="managed-custom-field"></a>

**Campos administrados**

Los campos gestionados contienen datos asociados a cosas, grupos de cosas, dispositivos ocultos, conectividad de los dispositivos e infracciones de Device Defender. AWS IoT define el tipo de datos en los campos gestionados. El usuario especifica los valores de cada campo administrado cuando se crea un objeto de AWS IoT . Por ejemplo, los nombres de objetos, los grupos de objetos y las descripciones de objetos son todos campos administrados. La indexación de flotas indexa los campos administrados en función del modo de indexación que usted especifique. Los campos administrados no se pueden cambiar ni pueden aparecer en `customFields`.

**Campos personalizados**

Puede agregar atributos, datos de Device Shadow y datos de infracciones de Device Defender creando campos personalizados para indexarlos. El atributo `customFields` es una lista de pares de campos y tipos de datos con nombre. Puede realizar consultas de agregación en función del tipo de datos. El modo de indexación que elija afecta a los campos se puede especificar en `customFields`. Por ejemplo, si especifica el modo de indexación `REGISTRY`, no puede especificar un campo personalizado de una sombra de objeto. Puede usar el comando [update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html)CLI para crear o actualizar los campos personalizados (consulte un comando de ejemplo en [Actualización de ejemplos de configuración de indexación](#update-index-examples)). Para obtener más información, consulte [Campos personalizados](managing-fleet-index.md#custom-field).

### Filtro de indexación
<a name="thing-indexing-filter"></a>

El filtro de indexación proporciona selecciones adicionales para las sombras con nombre y los datos de geolocalización. 

**`namedShadowNames`**

Para añadir sombras con nombre a su configuración de indexación de flotas, establezca `namedShadowIndexingMode` en `ON` y especifique los nombres de las sombras con nombre con el filtro `namedShadowNames`.

**Ejemplo**

```
"filter": {
     "namedShadowNames": [ "namedShadow1", "namedShadow2" ]
}
```

`geoLocations`

Para añadir datos de geolocalización a su configuración de indexación de flotas: 
+ Si sus datos de geolocalización se almacenan en una sombra clásica (sin nombre), establezca `thingIndexingMode` en REGISTRY\$1AND\$1SHADOW y especifique los datos de geolocalización en el filtro `geoLocations`.

  El siguiente filtro de ejemplo especifica un objeto geoLocation en una sombra clásica (sin nombre):

  ```
  "filter": {
       "geoLocations": [
          {
              "name": "shadow.reported.location",
              "order": "LonLat"
          }
       ]
    }
  ```
+ Si los datos de geolocalización están almacenados en una sombra con nombre, establezca `namedShadowIndexingMode` en ON, añada el nombre de la sombra al filtro `namedShadowNames` y especifique los datos de geolocalización en el filtro `geoLocations`.

  El siguiente filtro de ejemplo especifica un objeto geoLocation en una sombra con nombre (`nameShadow1`):

  ```
  "filter": {
       "namedShadowNames": [ "namedShadow1" ],
       "geoLocations": [
          {
              "name": "shadow.name.namedShadow1.reported.location",
              "order": "LonLat"
          }
       ]
    }
  ```

Para obtener más información, consulte la *referencia [ IndexingFilter](https://docs.aws.amazon.com/iot/latest/apireference/API_IndexingFilter.html)de la *AWS IoT*API*.

### Actualización de ejemplos de configuración de indexación
<a name="update-index-examples"></a>

Para actualizar la configuración de indexación, utilice el comando AWS IoT **update-indexing-configuration** CLI. En los siguientes ejemplos se muestra cómo utilizar **update-indexing-configuration**.

Sintaxis corta:

```
aws iot update-indexing-configuration --thing-indexing-configuration \
'thingIndexingMode=REGISTRY_AND_SHADOW, deviceDefenderIndexingMode=VIOLATIONS, 
namedShadowIndexingMode=ON,filter={namedShadowNames=[thing1shadow]}, thingConnectivityIndexingMode=STATUS,
customFields=[{name=attributes.version,type=Number},
{name=shadow.name.thing1shadow.desired.DefaultDesired, type=String}, {name=shadow.desired.power, type=Boolean}, 
{name=deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number, type=Number}]'
```

Sintaxis de JSON:

```
aws iot update-indexing-configuration --cli-input-json \ '{
          "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY_AND_SHADOW",
          "thingConnectivityIndexingMode": "STATUS", 
          "deviceDefenderIndexingMode": "VIOLATIONS",
          "namedShadowIndexingMode": "ON",
          "filter": { "namedShadowNames": ["thing1shadow"]},
          "customFields": [ { "name": "shadow.desired.power", "type": "Boolean" }, 
          {"name": "attributes.version", "type": "Number"}, 
          {"name": "shadow.name.thing1shadow.desired.DefaultDesired", "type": "String"}, 
          {"name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number", "type": Number} ] } }'
```

Este comando no proporciona ninguna salida.

Para comprobar el estado del índice del objeto, ejecute el comando de la CLI `describe-index`: 

```
aws iot describe-index --index-name "AWS_Things"
```

El resultado del comando `describe-index` tendrá un aspecto similar al siguiente:

```
{
    "indexName": "AWS_Things",
    "indexStatus": "ACTIVE",
    "schema": "MULTI_INDEXING_MODE"
}
```

**nota**  
La indexación de la flota puede tardar un momento en actualizar el índice de la flota. Recomendamos esperar a que `indexStatus` aparezca activo antes de usarla. Puede tener valores diferentes en el campo de esquema en función de los orígenes de datos que haya configurado. Para obtener más información, consulte [Descripción de un índice de objeto](#describe-index).

Para obtener los detalles de la configuración de indexación, ejecute el comando de la CLI `get-indexing-configuration`: 

```
aws iot get-indexing-configuration
```

El resultado del comando `get-indexing-configuration` tendrá un aspecto similar al siguiente:

```
{
    "thingIndexingConfiguration": {
        "thingIndexingMode": "REGISTRY_AND_SHADOW",
        "thingConnectivityIndexingMode": "STATUS",
        "deviceDefenderIndexingMode": "VIOLATIONS",
        "namedShadowIndexingMode": "ON",
        "managedFields": [
            {
                "name": "connectivity.disconnectReason",
                "type": "String"
            },
            {
                "name": "registry.version",
                "type": "Number"
            },
            {
                "name": "thingName",
                "type": "String"
            },
            {
                "name": "deviceDefender.violationCount",
                "type": "Number"
            },
            {
                "name": "shadow.hasDelta",
                "type": "Boolean"
            },
            {
                "name": "shadow.name.*.version",
                "type": "Number"
            },
            {
                "name": "shadow.version",
                "type": "Number"
            },
            {
                "name": "connectivity.version",
                "type": "Number"
            },
            {
                "name": "connectivity.timestamp",
                "type": "Number"
            },
            {
                "name": "shadow.name.*.hasDelta",
                "type": "Boolean"
            },
            {
                "name": "registry.thingTypeName",
                "type": "String"
            },
            {
                "name": "thingId",
                "type": "String"
            },
            {
                "name": "connectivity.connected",
                "type": "Boolean"
            },
            {
                "name": "registry.thingGroupNames",
                "type": "String"
            }
        ],
        "customFields": [
            {
                "name": "shadow.name.thing1shadow.desired.DefaultDesired",
                "type": "String"
            },

            {
                "name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number",
                "type": "Number"
            },
            {
                "name": "shadow.desired.power",
                "type": "Boolean"
            },
            {
                "name": "attributes.version",
                "type": "Number"
            }
        ], 
        "filter": {
              "namedShadowNames": [
                  "thing1shadow"
              ]
          }
      },
    "thingGroupIndexingConfiguration": {
        "thingGroupIndexingMode": "OFF"
    }
}
```

Para actualizar los campos personalizados, puede ejecutar el comando `update-indexing-configuration`. A continuación tiene un ejemplo:

```
aws iot update-indexing-configuration --thing-indexing-configuration
          'thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.version,type=Number},{name=attributes.color,type=String},{name=shadow.desired.power,type=Boolean},{name=shadow.desired.intensity,type=Number}]'
```

Este comando se agregó `shadow.desired.intensity` a la configuración de indexación.

**nota**  
La actualización de los campos personalizados en la configuración de indexación sobrescribe todos los campos personalizados existentes. Asegúrese de especificar todos los campos personalizados cuando llame a **update-indexing-configuration**.

Después de reconstruir el índice, puede utilizar una consulta de agregación en los campos recién agregados, los datos de registro de búsqueda, los datos de sombras y los datos de estado de conectividad de objetos.

Al cambiar el modo de indexación, asegúrese de que todos los campos personalizados son válidos en el nuevo modo de indexación. Por ejemplo, si utiliza el modo `REGISTRY_AND_SHADOW` con un campo personalizado llamado `shadow.desired.temperature`, debe eliminar el campo personalizado `shadow.desired.temperature` antes de cambiar el modo de indexación a `REGISTRY`. Si la configuración de indexación contiene campos personalizados que no están indexados por el modo de indexación, se producirá un error en la actualización. 

## Descripción de un índice de objeto
<a name="describe-index"></a>

El comando siguiente muestra cómo utilizar el comando **describe-index** de la CLI para recuperar el estado actual del índice del objeto:

```
aws iot describe-index --index-name "AWS_Things"
```

La respuesta del comando tendrá un aspecto similar al siguiente:

```
{
    "indexName": "AWS_Things", 
    "indexStatus": "BUILDING", 
    "schema": "REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS"
}
```

La primera vez que indexa la flota, AWS IoT crea su índice. Cuando `indexStatus` está en el estado `BUILDING`, no se puede consultar el índice. El valor `schema` del índice de objetos indica qué tipo de datos (`REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS`) se indexan.

Si se cambia la configuración del índice, el índice se vuelve a compilar. Durante este proceso, `indexStatus` es `REBUILDING`. Puede ejecutar consultas en los datos del índice de objetos mientras se está generando. Por ejemplo, si cambia la configuración del índice de `REGISTRY` a `REGISTRY_AND_SHADOW`, cuando el índice se vuelve a generar, puede consultar los datos del registro, incluidas las últimas actualizaciones. Sin embargo, no puede consultar los datos de sombra hasta que se complete la recompilación. El tiempo que tarda en compilar o recompilar el índice depende de la cantidad de datos.

Puede ver diferentes valores en el campo de esquema en función de los orígenes de datos que haya configurado. En la siguiente tabla, se muestran los diferentes valores de esquema y las descripciones correspondientes:


| Esquema | Description (Descripción) | 
| --- | --- | 
| OFF | No hay ningún origen de datos configurado ni indexado. | 
| REGISTRY | Solo se indexan los datos de registro. | 
| REGISTRY\$1AND\$1SHADOW | Se indexan los datos del registro y los datos de sombras sin nombre (clásicos). | 
| REGISTRY\$1AND\$1CONNECTIVITY | Se indexan los datos de registro y conectividad. | 
| REGISTRY\$1AND\$1SHADOW\$1AND\$1CONNECTIVITY\$1STATUS | Se indexan los datos de registro, los datos de sombras sin nombre (clásicos) y los datos de conectividad. | 
| MULTI\$1INDEXING\$1MODE | Se indexan los datos de sombras con nombre o las infracciones de Device Defender, además de los datos de registro, de sombras sin nombre (clásicos) o de conectividad. | 

## Consulta de un índice de objeto
<a name="search-index"></a>

Puede utilizar el comando **search-index** de la CLI para consultar los datos del índice.

```
aws iot search-index --index-name "AWS_Things" --query-string
          "thingName:mything*"
```

```
{  
    "things":[{  
         "thingName":"mything1",
         "thingGroupNames":[  
            "mygroup1"
         ],
         "thingId":"a4b9f759-b0f2-4857-8a4b-967745ed9f4e",
         "attributes":{  
            "attribute1":"abc"
         },
         "connectivity": { 
            "connected":false,
            "timestamp":1556649874716,
            "disconnectReason": "CONNECTION_LOST"
         }         
    },
    {  
        "thingName":"mything2",
        "thingTypeName":"MyThingType",
        "thingGroupNames":[  
            "mygroup1",
            "mygroup2"
        ],
        "thingId":"01014ef9-e97e-44c6-985a-d0b06924f2af",
        "attributes":{  
            "model":"1.2",
            "country":"usa"
        },
        "shadow":{  
            "desired":{  
                "location":"new york",
                "myvalues":[3, 4, 5]
            },
            "reported":{  
                "location":"new york",
                "myvalues":[1, 2, 3],
                "stats":{  
                    "battery":78
                }
            },
            "metadata":{  
                 "desired":{  
                       "location":{  
                            "timestamp":123456789
                        },
                       "myvalues":{  
                             "timestamp":123456789
                       }
                  },
                  "reported":{  
                        "location":{  
                             "timestamp":34535454
                         },
                        "myvalues":{  
                             "timestamp":34535454
                        },
                        "stats":{  
                             "battery":{  
                                   "timestamp":34535454
                             }
                        }
                 }
            },
            "version":10,
            "timestamp":34535454
        },
        "connectivity": { 
            "connected":true,
            "timestamp":1556649855046
        }        
    }],
    "nextToken":"AQFCuvk7zZ3D9pOYMbFCeHbdZ+h=G"
}
```

En la respuesta JSON,`"connectivity"` (según lo permita configuración de `thingConnectivityIndexingMode=STATUS`) proporciona un valor booleano, una marca temporal y un parámetro disconnectReason que indica si el dispositivo está conectado a AWS IoT Core. El dispositivo `"mything1"` desconectado (`false`) en tiempo POSIX `1556649874716` debido a `CONNECTION_LOST`. Para obtener información sobre los motivos de desconexión, consulte [Eventos del ciclo de vida](life-cycle-events.md). 

```
"connectivity": { 
    "connected":false,
    "timestamp":1556649874716, 
    "disconnectReason": "CONNECTION_LOST"
}
```

El dispositivo `"mything2"` conectado (`true`) en tiempo POSIX `1556649855046`:

```
"connectivity": { 
    "connected":true,
    "timestamp":1556649855046
}
```

Las marcas temporales se indican en milisegundos desde la fecha de inicio, por lo que `1556649855046` representa 6:44:15.046 p.m. el martes 30 de abril de 2019 (UTC).

**importante**  
Si un dispositivo se ha desconectado durante aproximadamente una hora, el valor `"timestamp"` y el valor `"disconnectReason"` del estado de conectividad podrían no aparecer.

## Restricciones y limitaciones
<a name="index-limitations"></a>

Estas son las restricciones y limitaciones de `AWS_Things`.

**Campos de sombra con tipos complejos**  
Un campo de sombra se indexa solo si el valor del campo es un tipo sencillo, como un objeto JSON que no incluya una matriz o una matriz que conste completamente de tipos sencillos. Un tipo sencillo es una cadena, un número o uno de los literales `true` o `false`. Por ejemplo, dado el siguiente estado de sombra, el valor del campo `"palette"` no se indexa porque es una matriz que incluye elementos de tipos complejos. El valor del campo `"colors"` sí se indexará porque cada valor de la matriz es una cadena.   

```
{
    "state": {
        "reported": {
            "switched": "ON",
            "colors": [ "RED", "GREEN", "BLUE" ],
            "palette": [
                {
                    "name": "RED", 
                    "intensity": 124
                },
                {
                    "name": "GREEN", 
                    "intensity": 68
                },
                {
                    "name": "BLUE", 
                    "intensity": 201
                }
            ]
        }
    }
}
```

**Nombres de campos de sombra anidados**  
Los nombres de los campos de sombra anidados se almacenan como una cadena delimitada por punto (.). Por ejemplo, dado un documento de sombra:  

```
{
  "state": {
    "desired": {
      "one": {
        "two": {
          "three": "v2"
        }
      }
    }    
  }
}
```
El nombre del campo `three` se almacena como `desired.one.two.three`. Si también tiene un documento de sombra, se guarda del modo siguiente:  

```
{
  "state": {
    "desired": {
      "one.two.three": "v2"
    }    
  }
}
```
Ambos coinciden con una consulta para `shadow.desired.one.two.three:v2`. La práctica recomendada es no utilizar puntos en los nombres de campos de sombra.

**Metadatos de sombra**  
Un campo en una sección de metadatos de sombra se indexa, pero solo si se indexa el campo correspondiente en la sección `"state"` de la sombra. (En el ejemplo anterior, el campo `"palette"` de la sección de metadatos de la sombra tampoco se indexa).

**Dispositivos no registrados**  
La indexación de flotas indexa el estado de conectividad de un dispositivo cuya conexión `clientId` es la misma que la `thingName` de un dispositivo registrado en el [Registro](https://docs.aws.amazon.com//iot/latest/developerguide/thing-registry.html).

**Sombras no registradas**  
Si antes [UpdateThingShadow](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html)creabas una sombra con el nombre de un objeto que no estaba registrado en tu AWS IoT cuenta, los campos de esa sombra no se indexarán. Esto se aplica tanto a la sombra sin nombre clásica como a la sombra con nombre.

**Valores numéricos**  
Si el servicio reconoce como valor numérico algún dato de sombra o de registro, se indexa como tal. Puede formar consultas que impliquen rangos y operadores de comparación en valores numéricos (por ejemplo `"attribute.foo<5"` o `"shadow.reported.foo:[75 TO 80]"`). Para que se reconozca como numérico, el valor de los datos debe ser un número JSON válido y de tipo literal. El valor puede ser un entero en el rango -2^53...2^53-1, un punto flotante de doble precisión con notación exponencial opcional, o parte de una matriz que contenga solo estos valores. 

**Valores nulos**  
Los valores nulos no se indexan.

**Valores máximos**  
El número máximo de campos personalizados para consultas de agregación es 5.  
El número máximo de percentiles solicitados para consultas de agregación es 100.

## Autorización
<a name="query-auth"></a>

Puede especificar el índice de cosas como un nombre de recurso de Amazon (ARN) en una acción AWS IoT política, de la siguiente manera.


****  

| Action | Recurso | 
| --- | --- | 
|  `iot:SearchIndex`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-regionyour-aws-account:index/AWS_Things`).  | 
|  `iot:DescribeIndex`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-region:index/AWS_Things`).  | 

**nota**  
Si tiene los permisos para consultar el índice de la flota, podrá obtener acceso a los datos de los objetos en toda la flota.