Ricerca di testo (novità)

Seleziona la piattaforma: Android iOS JavaScript Servizio web

Sviluppatori dello Spazio economico europeo (SEE)

Ricerca testuale (Nuova) restituisce informazioni su un insieme di luoghi in base a una stringa (ad esempio "pizza a New York" o "negozi di scarpe vicino a Ottawa" o "123 Main Street"). Il servizio risponde con un elenco di luoghi che corrispondono alla stringa di testo e a qualsiasi bias di località impostato.

Oltre ai parametri obbligatori, Ricerca testuale (Nuova) supporta l'affinamento delle query utilizzando parametri facoltativi per ottenere risultati migliori.

Ricerca testuale (Nuova) è simile a Nearby Search (Nuova). La differenza principale tra i due è che Ricerca testuale (New) ti consente di specificare una stringa di ricerca arbitraria, mentre Nearby Search (New) richiede un'area specifica in cui cercare.

Richieste di ricerca testuale

Una richiesta di ricerca testuale ha il seguente formato:

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);

// Define latitude and longitude coordinates of the search area.
LatLng southWest = new LatLng(37.38816277477739, -122.08813770258874);
LatLng northEast = new LatLng(37.39580487866437, -122.07702325966572);

// Use the builder to create a SearchByTextRequest object.
final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
  .setMaxResultCount(10)
  .setLocationRestriction(RectangularBounds.newInstance(southWest, northEast)).build();

// Call PlacesClient.searchByText() to perform the search.
// Define a response handler to process the returned List of Place objects.
placesClient.searchByText(searchByTextRequest)
    .addOnSuccessListener(response -> {
      List<Place> places = response.getPlaces();
    });

In questo esempio:

  • Imposta l'elenco dei campi in modo da includere solo Place.Field.ID e Place.Field.DISPLAY_NAME. Ciò significa che gli oggetti Place nella risposta che rappresentano ogni luogo corrispondente contengono solo questi due campi.

  • Utilizza SearchByTextRequest.Builder per creare un SearchByTextRequest oggetto che definisce la ricerca.

    • Imposta la stringa di query di testo su "Spicy Vegetarian Food".

    • Imposta il numero massimo di luoghi di risultati su 10. Il valore predefinito e il valore massimo sono 20.

    • Limita l'area di ricerca al rettangolo definito dalle coordinate di latitudine e longitudine. Non vengono restituiti risultati al di fuori di questa area.

  • Aggiungi un OnSuccessListener e recupera i luoghi corrispondenti dall' SearchByTextResponse oggetto.

Risposte di ricerca testuale

La SearchByTextResponse classe rappresenta la risposta a una richiesta di ricerca. Un oggetto SearchByTextResponse contiene:

  • Un elenco di oggetti Place che rappresentano tutti i luoghi corrispondenti, con un oggetto Place per ogni luogo corrispondente.

  • Ogni oggetto Place contiene solo i campi definiti dall'elenco dei campi passati nella richiesta.

Ad esempio, nella richiesta hai definito un elenco di campi come:

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.DISPLAY_NAME);

Questo elenco di campi significa che ogni oggetto Place nella risposta contiene solo l'ID luogo e il nome di ogni luogo corrispondente. Puoi quindi utilizzare i metodi Place.getId() e Place.getName() per accedere a questi campi in ogni oggetto Place.

Per altri esempi di accesso ai dati in un oggetto Place, consulta Accedere ai campi di dati dell'oggetto Place

Impaginazione

La classe SearchByTextResponse di Text Search fornisce l'accesso all'impaginazione dei risultati di ricerca testuale tramite il metodo getPagination(), che restituisce un oggetto Pagination.

Utilizza il metodo hasNextPage() dell'oggetto Pagination per determinare se sono disponibili altre pagine di risultati. Questo metodo restituisce un valore booleano (true o false).

Mentre hasNextPage() restituisce true, chiama il metodo fetchNextPage() per recuperare la pagina successiva di risultati.

L'esempio seguente mostra come verificare se è disponibile una pagina successiva e poi caricare la pagina.

Kotlin

val searchByTextRequest =
      searchByTextRequest("restaurants", Arrays.asList(Place.Field.NAME)) {
        maxResultCount = 10
      }

// using pagination object (Preferred)
placesClient.searchByText(searchByTextRequest)   
    .addOnSuccessListener {response: SearchByTextResponse ->
        val places = response.places

        val pagination = response.pagination

        if (pagination.hasNextPage()) {
            pagination.setPageSize(20)
            pagination.fetchNextPage()
                    .addOnSuccessListener { nextPageResponse ->
                          val nextPagePlaces = nextPageResponse.getPlaces()
                    }
                    .addOnFailureListener {// Handle error with given status code}
        }
}
.addOnFailureListener {
// TODO: Handle error with given status code.
exception -> {
          exception.printStackTrace();
        }
}

Java

SearchByTextRequest searchByTextRequest =
  SearchByTextRequest.builder("restaurants", Arrays.asList(Place.Field.NAME)).setMaxResultCount(10).build();

// using pagination object (Preferred)
placesClient.searchByText(searchByTextRequest)
  .addOnSuccessListener((response) -> {
    List<Place> places = response.getPlaces();
    Log.i(TAG, "Places result: " + places);

    Pagination pagination =
      response.getPagination();

    if (pagination.hasNextPage()) {
      pagination.setPageSize(20); // change the page size from 10 to 20
      pagination.fetchNextPage()
    	  .addOnSuccessListener((nextPageResponse) -> {
            List<Place> nextPagePlaces = nextPageResponse.getPlaces();
            Log.i(TAG, "Next page places result: " + nextPagePlaces);
        });
    }
  })
  .addOnFailureListener((exception) -> {
    if (exception instanceof ApiException) {
    	// Handle error with given status code
    }
  });

Parametri obbligatori

I parametri obbligatori per SearchByTextRequest sono:

  • Elenco dei campi

    Specifica quali campi di dati del luogo restituire. Passa un elenco di Place.Field valori che specificano i campi dati da restituire. Nella risposta non è presente un elenco predefinito di campi restituiti.

    Gli elenchi di campi sono una buona pratica di progettazione per assicurarti di non richiedere dati non necessari, il che aiuta a evitare tempi di elaborazione e addebiti di fatturazione non necessari.

    Specifica uno o più dei seguenti campi:

    • I seguenti campi attivano lo SKU Text Search Essentials ID Only:

      Place.Field.DISPLAY_NAME*
          * Utilizza al posto di Place.Field.NAME (deprecato nella versione 4.0).
      Place.Field.ID
      Place.Field.RESOURCE_NAME*
          * Contiene il nome della risorsa del luogo nel formato: places/PLACE_ID.
      Utilizza DISPLAY_NAME per accedere al nome di testo del luogo.

      Per un elenco completo dei campi e degli SKU associati, consulta Campi dati del luogo (New).

    • I seguenti campi attivano lo SKU Ricerca testuale Pro:

      Place.Field.ACCESSIBILITY_OPTIONS*
          Utilizza al posto di Place.Field.WHEELCHAIR_ACCESSIBLE_ENTRANCE (deprecato).
      Place.Field.ADDRESS_COMPONENTS
      Place.Field.ADR_FORMAT_ADDRESS
      Place.Field.BUSINESS_STATUS
      Place.Field.FORMATTED_ADDRESS*
          Utilizza al posto di Place.Field.ADDRESS (deprecato).
      Place.Field.GOOGLE_MAPS_URI
      Place.Field.ICON_BACKGROUND_COLOR
      Place.Field.ICON_MASK_URL *
          Utilizza al posto di Place.Field.ICON_URL (deprecato).
      Place.Field.LOCATION*
          Utilizza al posto di Place.Field.LAT_LNG (deprecato).
      Place.Field.PHOTO_METADATAS
      Place.Field.PLUS_CODE
      Place.Field.PRIMARY_TYPE
      Place.Field.PRIMARY_TYPE_DISPLAY_NAME
      Place.Field.SHORT_FORMATTED_ADDRESS
      Place.Field.SUB_DESTINATIONS
      Place.Field.TYPES
      Place.Field.UTC_OFFSET
      Place.Field.VIEWPORT

      Per un elenco completo dei campi e degli SKU associati, consulta Campi dati del luogo (New).

    • I seguenti campi attivano lo SKU Ricerca testuale Enterprise:

      Place.Field.CURRENT_OPENING_HOURS
      Place.Field.CURRENT_SECONDARY_OPENING_HOURS
      Place.Field.INTERNATIONAL_PHONE_NUMBER*
          * Utilizza al posto di Place.Field.PHONE_NUMBER, che è deprecato.
      Place.Field.NATIONAL_PHONE_NUMBER
      Place.Field.OPENING_HOURS
      Place.Field.PRICE_LEVEL
      Place.Field.RATING
      Place.Field.SECONDARY_OPENING_HOURS
      Place.Field.USER_RATING_COUNT*
          * Utilizza al posto di Place.Field.USER_RATINGS_TOTAL, che è deprecato.
      Place.Field.WEBSITE_URI

      Per un elenco completo dei campi e degli SKU associati, consulta Campi dati del luogo (New).

    • I seguenti campi attivano lo SKU Ricerca testuale Enterprise Plus:

      Place.Field.ALLOWS_DOGS
      Place.Field.CURBSIDE_PICKUP
      Place.Field.DELIVERY
      Place.Field.DINE_IN
      Place.Field.EDITORIAL_SUMMARY
      Place.Field.EV_CHARGE_OPTIONS
      Place.Field.FUEL_OPTIONS
      Place.Field.GOOD_FOR_CHILDREN
      Place.Field.GOOD_FOR_GROUPS
      Place.Field.GOOD_FOR_WATCHING_SPORTS
      Place.Field.LIVE_MUSIC
      Place.Field.MENU_FOR_CHILDREN
      Place.Field.OUTDOOR_SEATING
      Place.Field.PARKING_OPTIONS
      Place.Field.PAYMENT_OPTIONS
      Place.Field.RESERVABLE
      Place.Field.RESTROOM
      Place.Field.REVIEWS
      Place.Field.SERVES_BEER
      Place.Field.SERVES_BREAKFAST
      Place.Field.SERVES_BRUNCH
      Place.Field.SERVES_COCKTAILS
      Place.Field.SERVES_COFFEE
      Place.Field.SERVES_DESSERT
      Place.Field.SERVES_DINNER
      Place.Field.SERVES_LUNCH
      Place.Field.SERVES_VEGETARIAN_FOOD
      Place.Field.SERVES_WINE
      Place.Field.TAKEOUT

      Per un elenco completo dei campi e degli SKU associati, consulta Campi dati del luogo (New).

    Per impostare il parametro dell'elenco dei campi, chiama il setPlaceFields() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Query di testo

    La stringa di testo su cui eseguire la ricerca, ad esempio: "ristorante", "123 Main Street" o "il posto migliore da visitare a San Francisco". L'API restituisce le corrispondenze candidate in base a questa stringa e ordina i risultati in base alla loro pertinenza percepita.

    Per impostare il parametro della query di testo, chiama il setTextQuery() durante la creazione dell'SearchByTextRequest.

Parametri facoltativi

Utilizza l' SearchByTextRequest oggetto per specificare i parametri facoltativi per la richiesta.

  • Tipo incluso

    Limita i risultati ai luoghi che corrispondono al tipo specificato definito da Tabella A. È possibile specificare un solo tipo. Ad esempio:

    • setIncludedType("bar")
    • setIncludedType("pharmacy")

    Per impostare il parametro del tipo incluso, chiama il setIncludedType() durante la creazione dell'oggetto SearchByTextRequest.

  • Bias di località

    Specifica un'area in cui cercare. Questa località funge da bias, il che significa che risultati intorno alla località specificata possono essere restituiti, inclusi i risultati al di fuori dell'area specificata.

    Puoi specificare la limitazione della località o il bias di località, ma non entrambi. Considera la limitazione della località come la specifica della regione in cui devono trovarsi i risultati e il bias di località come la specifica della regione in cui è probabile che i risultati si trovino o nelle vicinanze, tenendo presente che quando utilizzi il bias di località, i risultati possono comunque trovarsi al di fuori dell'area specificata.

    Specifica la regione come area visibile rettangolare o come cerchio.

    • Un cerchio è definito dal punto centrale e dal raggio in metri. Il raggio deve essere compreso tra 0,0 e 50000,0 inclusi. Ad esempio:

      // Define latitude and longitude coordinates of the center of the search area.
      LatLng searchCenter = new LatLng(37.38816277477739, -122.08813770258874);
      
      // Use the builder to create a SearchByTextRequest object.
      // Set the radius of the search area to 500.0 meters.
      final SearchByTextRequest searchByTextRequest = SearchByTextRequest.builder("Spicy Vegetarian Food", placeFields)
        .setMaxResultCount(10)
        .setLocationBias(CircularBounds.newInstance(searchCenter, 500.0)).build();
    • Un rettangolo è un'area visibile di latitudine e longitudine, rappresentata da due diagonalmente opposti punti basso e alto. Il punto più basso indica l'angolo sud-ovest del rettangolo, mentre il punto più alto rappresenta l'angolo nord-est del rettangolo.

      Un'area visibile è considerata una regione chiusa, il che significa che include il suo confine. I limiti di latitudine devono essere compresi tra -90 e 90 gradi inclusi e i limiti di longitudine devono essere compresi tra -180 e 180 gradi inclusi:

      • Se low = high, l'area visibile è costituita da un singolo punto.
      • Se low.longitude > high.longitude, l'intervallo di longitudine viene invertito (l'area visibile attraversa la linea di longitudine di 180 gradi).
      • Se low.longitude = -180 gradi e high.longitude = 180 gradi, l'area visibile include tutte le longitudini.
      • Se low.longitude = 180 gradi e high.longitude = -180 gradi, l'intervallo di longitudine è vuoto.
      • Se low.latitude > high.latitude, l'intervallo di latitudine è vuoto.

      Sia il valore di base che il valore finale devono essere compilati e la casella rappresentata non può essere vuota. Un'area visibile vuota genera un errore.

      Per un esempio di area visibile rettangolare, consulta Richieste di ricerca testuale.

      Per impostare il parametro del bias di località, chiama il setLocationBias() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Limitazione della località

    Specifica un'area in cui cercare. Non vengono restituiti risultati al di fuori dell'area specificata. Specifica la regione come area visibile rettangolare. Per informazioni sulla definizione dell'area visibile, consulta la descrizione del bias di località.

    Puoi specificare la limitazione della località o il bias di località, ma non entrambi. Considera la limitazione della località come la specifica della regione in cui devono trovarsi i risultati e il bias di località come la specifica della regione in cui i risultati devono trovarsi nelle vicinanze, ma possono essere al di fuori dell'area.

    Per impostare il parametro della limitazione della località, chiama il setLocationRestriction() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Numero massimo di risultati

    Specifica il numero massimo di risultati di luoghi da restituire. Deve essere compreso tra 1 e 20 (valore predefinito) inclusi.

    Per impostare il parametro del numero massimo di risultati, chiama il setMaxResultCount() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Valutazione minima

    Limita i risultati solo a quelli la cui valutazione media degli utenti è maggiore o uguale a questo limite. I valori devono essere compresi tra 0,0 e 5,0 (inclusi) con incrementi di 0,5. Ad esempio: 0, 0,5, 1,0, ..., 5,0 inclusi. I valori vengono arrotondati per eccesso al valore più vicino a 0,5. Ad esempio, un valore di 0,6 elimina tutti i risultati con una valutazione inferiore a 1,0.

    Per impostare il parametro della valutazione minima, chiama il setMinRating() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Aperto adesso

    Se true, restituisce solo i luoghi aperti al pubblico al momento dell'invio della query. Se false, restituisce tutte le attività indipendentemente dallo stato di apertura. I luoghi che non specificano gli orari di apertura nel database di Google Places vengono restituiti se imposti questo parametro su false.

    Per impostare il parametro aperto adesso, chiama il setOpenNow() durante la creazione del SearchByTextRequest.

  • Livelli di prezzo

    Per impostazione predefinita, i risultati includono i luoghi che forniscono servizi a tutti i livelli di prezzo. Per limitare i risultati in modo da includere solo i luoghi a determinati livelli di prezzo, puoi passare un elenco di valori interi che corrispondono ai livelli di prezzo dei luoghi che vuoi restituire:

    • 1 - Il luogo fornisce servizi economici.
    • 2 - Il luogo fornisce servizi a prezzi moderati.
    • 3 - Il luogo fornisce servizi costosi.
    • 4 - Il luogo fornisce servizi molto costosi.

    Per impostare il parametro dei livelli di prezzo, chiama il setPriceLevels() durante la creazione dell'oggetto SearchByTextRequest.

  • Preferenza di ranking

    Specifica come vengono classificati i risultati nella risposta in base al tipo di query:

    • Per una query categorica come "Ristoranti a New York", SearchByTextRequest.RankPreference.RELEVANCE (classifica i risultati in base alla pertinenza della ricerca) è il valore predefinito. Puoi impostare la preferenza di ranking su SearchByTextRequest.RankPreference.RELEVANCE o SearchByTextRequest.RankPreference.DISTANCE (classifica i risultati in base alla distanza).
    • Per una query non categorica come "Mountain View, CA", ti consigliamo di lasciare il parametro della preferenza di ranking non impostato.

    Per impostare il parametro della preferenza di ranking, chiama il setRankPreference() durante la creazione del SearchByTextRequest oggetto.

  • Codice regione

    Il codice regione utilizzato per formattare la risposta, specificato come valore del codice CLDR a due caratteri. Questo parametro può anche avere un effetto di bias sui risultati di ricerca. Non esiste un valore predefinito.

    Se il nome del paese del campo dell'indirizzo nella risposta corrisponde al codice regione, il codice paese viene omesso dall'indirizzo.

    La maggior parte dei codici CLDR sono identici ai codici ISO 3166-1, con alcune eccezioni notevoli. Ad esempio, il ccTLD del Regno Unito è "uk" (.co.uk), mentre il suo codice ISO 3166-1 è "gb" (tecnicamente per l' entità "Regno Unito di Gran Bretagna e Irlanda del Nord"). Il parametro può influire sui risultati in base alla legge applicabile.

    Per impostare il parametro del codice regione, chiama il setRegionCode() metodo durante la creazione dell'oggetto SearchByTextRequest.

  • Filtraggio dei tipi strict

    Utilizzato con il parametro del tipo incluso. Se impostato su true, vengono restituiti solo i luoghi che corrispondono ai tipi specificati dal tipo incluso. Se false, il valore predefinito, la risposta può contenere luoghi che non corrispondono ai tipi specificati.

    Per impostare il parametro del filtraggio dei tipi strict, chiama il setStrictTypeFiltering() durante la creazione del SearchByTextRequest.