

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 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")
    )))
```