

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à.

# Risultati di ricerca e classificazione per posizione geografica in Amazon CloudSearch
<a name="searching-locations"></a>

Se memorizzi le posizioni nei dati del documento utilizzando un `latlon` campo, puoi utilizzare la `haversin` funzione in un' CloudSearch espressione Amazon per calcolare la distanza tra due posizioni. L'archiviazione delle posizioni nei dati dei documenti ti permette anche di effettuare ricerche con facilità all'interno di determinate aree.

**Topics**
+ [Ricerca all'interno di un'area su Amazon CloudSearch](#within-area)
+ [Ordinamento dei risultati per distanza in Amazon CloudSearch](#sorting-by-distance)

## Ricerca all'interno di un'area su Amazon CloudSearch
<a name="within-area"></a>

Per associare una posizione a un documento di ricerca, puoi archiviare la latitudine e la longitudine della posizione in un campo `latlon` utilizzando la notazione in gradi decimali. I valori sono specificati come elenco separato da virgole, `lat,lon` ad esempio. `35.628611,-120.694152` L'associazione di una posizione con un documento ti consente di limitare facilmente le occorrenze di ricerca a una data area con il parametro `fq`. 

**Per utilizzare un riquadro di delimitazione per limitare i risultati a una particolare area**

1. Determina la latitudine e la longitudine degli angoli superiore sinistro e inferiore destro dell'area interessata. 

1. Utilizza il parametro `fq` per filtrare i documenti corrispondenti utilizzando le coordinate del riquadro di delimitazione. Ad esempio, se includi un campo `location` in ogni documento, potresti specificare il filtro del riquadro di delimitazione come `fq=location:['nn.n,nn.n','nn.n,nn.n'] `. Nel seguente esempio, le corrispondenze di *restaurant* sono filtrate in modo che solo le occorrenze nell'area del centro città di Paso Robles, California, siano incluse nei risultati. 

   ```
   q='restaurant'&fq=location:['35.628611,-120.694152','35.621966,-120.686706']&q.parser=structured
   ```

## Ordinamento dei risultati per distanza in Amazon CloudSearch
<a name="sorting-by-distance"></a>

Puoi definire un'espressione come parte della tua richiesta di ricerca per ordinare i risultati in base alla distanza. CloudSearch Le espressioni Amazon supportano la `haversin` funzione, che calcola la distanza del grande cerchio tra due punti su una sfera utilizzando la latitudine e la longitudine di ciascun punto. Per ulteriori informazioni, vedere [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula). La distanza risultante viene restituita in chilometri.

Per calcolare la distanza tra ogni documento corrispondente e l'utente, trasmetti la posizione dell'utente alla funzione `haversin` e fai riferimento alle posizioni dei documenti archiviate in un campo `latlon`. Puoi specificare la latitudine e la longitudine dell'utente in gradi decimali e accedere alla latitudine e alla longitudine archiviate in un campo `latlon` come `FIELD.latitude` e `FIELD.longitude`. Ad esempio, `expr.distance=haversin(userlat,userlon, location.latitude,location.longitude)`. 

Per usare l'espressione per ordinare i risultati di ricerca, specifica il parametro `sort`.

Ad esempio, la seguente query ricerca i ristoranti e ordina i risultati in base alla distanza rispetto all'utente. 

```
q=restaurant&expr.distance=haversin(35.621966,-120.686706,location.latitude,location.longitude)&sort=distance asc
```

Tieni presente che devi specificare in modo esplicito la direzione dell'ordinamento, ossia `asc` o `desc`. 

Puoi includere nei risultati di ricerca la distanza calcolata per ogni documento specificando il nome dell'espressione con il parametro `return`. Ad esempio, `return=distance`.

Inoltre, puoi usare il valore della distanza in espressioni più complesse per tenere conto di altre caratteristiche, come la rilevanza di un documento `_score`. Nel seguente esempio, un'espressione di seconda classificazione utilizza entrambi il valore di `distance` calcolato per il documento e il relativo valore `_score` di rilevanza.

```
expr.distance=haversin(38.958687,-77.343149,latitude,longitude)&expr.myrank=_score/log10(distance)&sort=myrank+desc
```

**Suggerimento**  
Perché queste query di esempio funzionino, devi [configurare l'indice](configuring-index-fields.md) con un campo `latlon` e disporre dei dati `location` nei documenti:  

```
{
  "fields": {
    "location": "40.05830,-74.40570"
  }
}
```
Se il campo non esiste, quando esegui una ricerca potresti ricevere il seguente messaggio di errore:  

```
Syntax error in query: field (location) does not exist.
```

Per ulteriori informazioni sull'utilizzo di espressioni per ordinare risultati di ricerca, consultare [Controllo dei risultati delle ricerche](controlling-search-results.md).