

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Indicizzazione basata su facet
<a name="indexing_search_facet"></a>

Con l'indicizzazione e la ricerca basata su facet, puoi ottimizzare le ricerche di directory ricercando solo un subset della directory. Per eseguire questa operazione, puoi utilizzare un *facet* di schema. Ad esempio, invece di ricercare in tutti gli oggetti utente nella directory, puoi cercare solo gli oggetti utente contenenti un facet dipendente. Questa efficienza aiuta a ridurre il tempo di latenza e la quantità di dati recuperati per la query. 

Con l'indicizzazione basata su facet, puoi utilizzare le operazioni API di indice di Cloud Directory per creare e collegare un indice ai facet degli oggetti. Puoi inoltre elencare i risultati dell'indice, quindi filtrare i risultati in base a determinati facet. In questo modo puoi ridurre in modo efficace i tempi di query e la quantità di dati restringendo l'ambito di ricerca esclusivamente agli oggetti contenenti un determinato tipo di facet.

L'attributo `“facets”` utilizzato con le chiamate API `[CreateIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_CreateIndex.html)` e `[ListIndex](https://docs.aws.amazon.com/clouddirectory/latest/APIReference/API_ListIndex.html)` visualizza la raccolta di facet applicati a un oggetto. Questo attributo è disponibile per l'uso solo con le chiamate API `CreateIndex` e `ListIndex`. Come illustrato nel seguente codice di esempio, lo schema ARN utilizza la regione della directory, il proprietario dell'account e l'ID directory per fare riferimento allo schema della Cloud Directory. Lo schema fornito dal servizio non viene visualizzato negli elenchi.

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

Ad esempio, il seguente codice di esempio crea un indice basato su facet specifico per il tuo account AWS e la directory in cui puoi enumerare tutti gli oggetti creati con il facet `SalesDepartmentFacet`. 

**Nota**  
Assicurati di utilizzare il valore "facets" all'interno dei parametri, come illustrato di seguito. Le istanze di «facets» visualizzate nel codice di esempio fanno riferimento a un valore fornito e controllato dal servizio Cloud Directory. Puoi utilizzarle per l'indicizzazione ma potresti averne l'accesso in sola lettura.

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