

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.

# Indexación y búsqueda
<a name="indexing_search"></a>

Amazon Cloud Directory es compatible con dos métodos de indexación: basada en valores y basada en tipos. La indexación basada en valores es la forma más común. Con ella, podrá indexar y buscar objetos en el directorio en función de los valores de los atributos de objeto. Con el indexado basado en tipos, podrá indexar y buscar objetos en el directorio en función de los tipos de objetos. Las facetas ayudan a definir los tipos de objetos. Para obtener más información acerca de esquemas y facetas, consulte [Schemas](schemas.md) y [Facets](schemas_whatarefacets.md).

Los índices de Cloud Directory permiten contar con una lista simple de otros objetos según los valores de sus atributos o facetas. Cada índice se define en el momento de crearse para que funcione con un atributo o faceta específicos. Por ejemplo, un índice puede definirse en el atributo "email" de la faceta "Person". Los índices son objetos de primera clase, lo que significa que los clientes pueden crearlos, modificarlos, listarlos y eliminarlos de forma flexible de acuerdo con las necesidades de la lógica de la aplicación.

Conceptualmente, los índices son similares a los nodos con elementos secundarios, donde los enlaces a los nodos indexados se etiquetan de acuerdo con los atributos indexados, en lugar de recibir una etiqueta cuando se adjunta el objeto secundario. No obstante, los enlaces de índice no son extremos principal-secundario, sino que tienen su propio conjunto de operaciones API de enumeración.

Es importante entender que los índices de Cloud Directory no se rellenarán automáticamente, ya que pueden estar en otros sistemas. En su lugar, utilice llamadas a la API para conectar y desconectar directamente los objetos a o desde el índice. Aunque sea un poco más laborioso, esto aporta flexibilidad para definir ámbitos de índice diferentes. Por ejemplo, puede definir un índice que solo realice un seguimiento de los elementos secundarios directos de un nodo específico. También puede definir un índice que realice un seguimiento de todos los objetos de una determinada ramificación bajo una raíz local, como todos los nodos dentro de un departamento. También puede hacer ambas cosas al mismo tiempo.

**Topics**
+ [Ciclo de vida del índice](indexing_search_lifecycle.md)
+ [Indexación basada en facetas](indexing_search_facet.md)
+ [Índices únicos y no únicos](indexing_search_unique.md)

# Ciclo de vida del índice
<a name="indexing_search_lifecycle"></a>

Puede utilizar las siguientes llamadas a la API para ayudar en el ciclo de vida de desarrollo de índices. 

1. Puede crear índices con la llamada al API `[CreateIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_CreateIndex.html)`. Puede indicar una estructura de definición del índice que describa los atributos de los objetos adjuntos que rastreará el índice. La definición también indica si el índice debe imponer una unicidad o no. El resultado es un ID de objeto para el nuevo índice que debería adjuntarse inmediatamente a la jerarquía, como con cualquier otro objeto. Por ejemplo, puede ser una ramificación específica para albergar índices.

1. Puede adjuntar objetos al índice de forma manual con la llamada al API `[AttachToIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_AttachToIndex.html)`. El índice, a continuación, realiza un seguimiento automático de los valores de sus atributos definidos en cada objeto adjunto.

1. Para utilizar los índices para buscar objetos con una enumeración más eficiente, llame a `[ListIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_ListIndex.html)` y especifique un rango de valores que le interesen.

1. Utilice la llamada a la API `[ListAttachedIndices](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_ListAttachedIndices.html)` para enumerar los índices adjuntos a un objeto determinado.

1. Utilice la llamada a la API `[DetachFromIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_DetachFromIndex.html)` para eliminar objetos del índice de forma manual.

1. Una vez que desasocie todos los objetos del índice, podrá eliminarlo con la llamada a la API `[DeleteObject](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_DeleteObject.html)`.

No existe ningún límite para el número de índices que puede incluir un directorio, aparte del límite en cuanto al espacio que ocupan todos los objetos. Los índices y sus adjuntos consumen espacio, pero parecido al que consumen los nodos y los enlaces principalsecundario. Sí hay límite en cuanto al número de índices que se pueden adjuntar a un objeto concreto. Para obtener más información, consulte [Límites en Amazon Cloud Directory](limits.md).

# Indexación basada en facetas
<a name="indexing_search_facet"></a>

Con la indexación y la búsqueda basadas en facetas puede optimizar las búsquedas en su directorio y buscar únicamente en un subconjunto del mismo. Para ello, utilice una *faceta* de esquema. Por ejemplo, en lugar de buscar en todos los objetos de usuarios en su directorio, puede buscar únicamente los objetos de usuario que contengan una faceta de empleado. Esto ayuda a reducir el tiempo de latencia y la cantidad de datos recuperados para la consulta. 

Con la indexación basada en facetas puede utilizar las operaciones API de índices de Cloud Directory para crear y adjuntar un índice a las facetas de los objetos. También puede enumerar los resultados del índice y, a continuación, filtrar los resultados en función de determinadas facetas. Esto puede reducir de forma eficaz los tiempos de consulta y la cantidad de datos, restringiendo el ámbito de búsqueda únicamente a los objetos que contengan un determinado tipo de facetas.

El atributo `“facets”` que se utiliza con las llamadas a la API `[CreateIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_CreateIndex.html)` y `[ListIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_ListIndex.html)` muestra el conjunto de facetas aplicadas a un objeto. Este atributo está disponible para su uso exclusivamente con las llamadas a la API `CreateIndex` y `ListIndex`. Como se ve en el siguiente código de muestra, el ARN del esquema utiliza la región, la cuenta propietaria y el ID del directorio para hacer referencia al esquema del Cloud Directory. El esquema proporcionado por el servicio no aparece en las listas.

```
String cloudDirectorySchemaArn = String.format(“arn:aws:clouddirectory:%s:%s:directory/%s/schema/CloudDirectory/1.0", region, ownerAccount, directoryId);
```

Por ejemplo, el siguiente código de muestra crea un índice basado en facetas específico de su cuenta de AWS y del directorio con el que puede enumerar todos los objetos creados con la faceta `SalesDepartmentFacet`. 

**nota**  
Asegúrese de utilizar el valor de facetas dentro de los parámetros, tal y como se muestra a continuación. Las instancias de «facetas» que se ve en el código de muestra se refieren a un valor proporcionado y controlado por el servicio Cloud Directory. Puede utilizarlas para la indexación, pero podrían tener acceso de solo lectura.

```
// Create a facet-based index
String cloudDirectorySchemaArn = String.format(“arn:aws:clouddirectory:%s:%s:directory/%s/schema/CloudDirectory/1.0",
    region, ownerAccount, directoryId);

facetIndexResult = clouddirectoryClient.createIndex(new CreateIndexRequest() 
  .withDirectoryArn(directoryArn) 
  .withOrderedIndexedAttributeList(List(new AttributeKey()     
        .withSchemaArn(cloudDirectorySchemaArn)     
        .withFacetName("facets")     
        .withName("facets"))) 
        .withIsUnique(false) 
        .withParentReference("/") 
        .withLinkName("MyFirstFacetIndex"))
facetIndex = facetIndexResult.getObjectIdentifier()

// Attach objects to the facet-based index
clouddirectoryClient.attachToIndex(new AttachToIndexRequest().withDirectoryArn(directoryArn)
  .withIndexReference(facetIndex).withTargetReference(userObj))

// List all objects
val listResults = clouddirectoryClient.listIndex(new ListIndexRequest()
  .withDirectoryArn(directoryArn)
  .withIndexReference(facetIndex)
  .getIndexAttachments()

// List the index results filtering for a certain facet
val filteredResults = clouddirectoryClient.listIndex(new ListIndexRequest()
  .withDirectoryArn(directoryArn)
  .withIndexReference(facetIndex)
  .withRangesOnIndexedValues(new ObjectAttributeRange()
    .withAttributeKey(new AttributeKey()
      .withFacetName("facets")
      .withName("facets")
      .withSchemaArn(cloudDirectorySchemaArn))
    .withRange(new TypedAttributeValueRange()
      .withStartMode(RangeMode.INCLUSIVE)
      .withStartValue("MySchema/1.0/SalesDepartmentFacet")
      .withEndMode(RangeMode.INCLUSIVE)
      .withEndValue("MySchema/1.0/SalesDepartmentFacet")
    )))
```

# Índices únicos y no únicos
<a name="indexing_search_unique"></a>

Los índices únicos se diferencian de los no únicos en que requieren que los valores de los atributos indexados sean únicos para los objetos adjuntados al índice. Por ejemplo, puede que quiera utilizar dos índices para objetos Persona, uno único con el atributo "email", y uno no único con el atributo "apellido". El índice del apellido permite adjuntar varios objetos Persona que tengan el mismo apellido. Por otra parte, la llamada `AttachToIndex` que se dirige al índice de email devuelve un error `LinkNameAlreadyInUseException` si ya tiene adjuntada una Persona con el mismo atributo de email. Tenga en cuenta que el error no elimina el objeto de Persona. Por tanto, una aplicación podría crear el objeto Persona, adjuntarlo a la jerarquía y a los índices, todo en una única solicitud de lote. De este modo, se garantiza que, si se infringe la unicidad en cualquiera de los índices, el objeto y todos sus adjuntos se devuelvan automáticamente.