Wyszukaj tekst (nowa funkcja)

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Wyszukiwanie tekstowe (nowe) zwraca informacje o zbiorze miejsc na podstawie ciągu znaków (np. „pizza w Nowym Jorku”, „sklepy obuwnicze w pobliżu Ottawy” lub „123 Main Street”). Usługa odpowiada listą miejsc pasujących do ciągu tekstowego i wszelkich ustawionych odchyleń lokalizacji.

Oprócz parametrów wymaganych usługa wyszukiwania tekstu (nowa) umożliwia doprecyzowanie zapytań za pomocą parametrów opcjonalnych, aby uzyskać lepsze wyniki.

Wyszukiwanie tekstowe (nowe) jest podobne do wyszukiwania w pobliżu (nowego). Główna różnica między nimi polega na tym, że w przypadku wyszukiwania tekstowego (nowego) możesz określić dowolny ciąg wyszukiwania, a w przypadku wyszukiwania w pobliżu (nowego) musisz określić konkretny obszar, w którym chcesz wyszukiwać.

Żądania wyszukiwania tekstowego

Żądanie wyszukiwania tekstowego ma postać:

// 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 ->< {
  >    ListPlace places = response.getPlaces();
    });

W tym przykładzie:

  • Ustaw listę pól tak, aby zawierała tylko Place.Field.IDPlace.Field.DISPLAY_NAME. Oznacza to, że obiekty Place w odpowiedzi, które reprezentują każde pasujące miejsce, zawierają tylko te 2 pola.

  • Użyj SearchByTextRequest.Builder, aby utworzyć obiekt SearchByTextRequest, który definiuje wyszukiwanie.

    • Ustaw ciąg zapytania tekstowego na „Spicy Vegetarian Food”.

    • Ustaw maksymalną liczbę miejsc w wynikach na 10. Wartość domyślna i maksymalna to 20.

    • Ogranicz obszar wyszukiwania do prostokąta zdefiniowanego przez współrzędne geograficzne. Nie są zwracane żadne dopasowania spoza tego obszaru.

  • Dodaj OnSuccessListener i uzyskaj pasujące miejsca z obiektu SearchByTextResponse.

Odpowiedzi wyszukiwania tekstowego

Klasa SearchByTextResponse reprezentuje odpowiedź na żądanie wyszukiwania. Obiekt SearchByTextResponse zawiera:

  • Lista obiektów Place reprezentujących wszystkie pasujące miejsca. Każde pasujące miejsce jest reprezentowane przez jeden obiekt Place.

  • Każdy obiekt Place zawiera tylko pola zdefiniowane na liście pól przekazanej w żądaniu.

Na przykład w żądaniu zdefiniowano listę pól w ten sposób:

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

Ta lista pól oznacza, że każdy obiekt Place w odpowiedzi zawiera tylko identyfikator miejsca i nazwę każdego pasującego miejsca. Następnie możesz użyć metod Place.getId()Place.getName(), aby uzyskać dostęp do tych pól w każdym obiekcie Place.

Więcej przykładów uzyskiwania dostępu do danych w obiekcie Place znajdziesz w artykule Uzyskiwanie dostępu do pól danych obiektu Place.

Podział na strony

Klasa SearchByTextResponse w usłudze Text Search zapewnia dostęp do stronicowania wyników wyszukiwania tekstowego za pomocą metody getPagination(), która zwraca obiekt Pagination.

Aby sprawdzić, czy dostępne są dodatkowe strony wyników, użyj metody hasNextPage() obiektu Pagination. Ta metoda zwraca wartość logiczną (prawda lub fałsz).

Gdy funkcja hasNextPage() zwróci wartość „true”, wywołaj metodę fetchNextPage(), aby pobrać następną stronę wyników.

Poniższy przykład pokazuje, jak sprawdzić, czy dostępna jest następna strona, a następnie ją wczytać.

Kotlin

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

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

        val pagination = response.pagination

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

Java

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

// using pagination object (Preferred)
placesClient.searchByText(searchByTextRequest)
  .addOnSuccessListener((r>esponse) - <{
   > ListPlace 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) <- {
 >           ListPlace nextPagePlaces = nextPageResponse.getPlaces();
            Log.i(TAG, "Next page places result: " + nextPagePlaces);
        });
    }
  })
  .addO>nFailureListener((exception) - {
    if (exception instanceof ApiException) {
    	// Handle error with given status code
    }
  });

Wymagane parametry

Wymagane parametry dla SearchByTextRequest to:

  • Lista pól

    Określ, które pola danych o miejscu mają być zwracane. Przekaż listę wartości Place.Field określających pola danych, które mają zostać zwrócone. W odpowiedzi nie ma domyślnej listy zwracanych pól.

    Listy pól to dobra praktyka projektowania, która pozwala uniknąć żądania niepotrzebnych danych, co z kolei pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.

    Określ co najmniej jedno z tych pól:

    • Te pola wywołują SKU Text Search Essentials ID Only:

      Place.Field.DISPLAY_NAME*
          * Używaj zamiast Place.Field.NAME (wycofano w wersji 4.0).
      Place.Field.ID
      Place.Field.RESOURCE_NAME*
          * Zawiera nazwę zasobu miejsca w formacie: places/PLACE_ID.
           Użyj DISPLAY_NAME, aby uzyskać dostęp do tekstowej nazwy miejsca.
    • Te pola wywołują jednostkę SKU Text Search Pro:

      Place.Field.ACCESSIBILITY_OPTIONS*
          Użyj zamiast Place.Field.WHEELCHAIR_ACCESSIBLE_ENTRANCE (wycofano).
      Place.Field.ADDRESS_COMPONENTS
      Place.Field.ADR_FORMAT_ADDRESS
      Place.Field.BUSINESS_STATUS
      Place.Field.FORMATTED_ADDRESS*
          Użyj zamiast Place.Field.ADDRESS (wycofano).
      Place.Field.GOOGLE_MAPS_URI
      Place.Field.ICON_BACKGROUND_COLOR
      Place.Field.ICON_MASK_URL *
          Użyj zamiast Place.Field.ICON_URL (wycofano).
      Place.Field.LOCATION*
          Używaj zamiast Place.Field.LAT_LNG (wycofano).
      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
    • Kod SKU Text Search Enterprise jest aktywowany przez te pola:

      Place.Field.CURRENT_OPENING_HOURS
      Place.Field.CURRENT_SECONDARY_OPENING_HOURS
      Place.Field.INTERNATIONAL_PHONE_NUMBER*
          * Używaj zamiast Place.Field.PHONE_NUMBER, które zostało wycofane.
      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*
          * Użyj zamiast wycofanego parametru Place.Field.USER_RATINGS_TOTAL.
      Place.Field.WEBSITE_URI
    • Wersja Text Search Enterprise Plus jest aktywowana przez te pola:

      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

    Aby ustawić parametr listy pól, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setPlaceFields().

  • Zapytanie tekstowe

    Ciąg tekstowy, według którego ma się odbywać wyszukiwanie, np. „restauracja”, „ul. Główna 123” lub „najlepsze miejsce do odwiedzenia w San Francisco”. Interfejs API zwraca pasujące kandydatury na podstawie tego ciągu znaków i porządkuje wyniki według ich trafności.

    Aby ustawić parametr zapytania tekstowego, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setTextQuery().

Parametry opcjonalne

Użyj obiektu SearchByTextRequest , aby określić opcjonalne parametry żądania.

  • Uwzględniony typ

    Ogranicza wyniki do miejsc pasujących do określonego typu zdefiniowanego w tabeli A. Można określić tylko 1 typ. Na przykład:

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

    Aby ustawić parametr included type, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setIncludedType().

  • Obciążenie lokalizacją

    Określa obszar wyszukiwania. Ta lokalizacja służy jako punkt odniesienia, co oznacza, że mogą być zwracane wyniki z okolic określonej lokalizacji, w tym wyniki spoza określonego obszaru.

    Możesz określić ograniczenie lokalizacji lub preferencje lokalizacyjne, ale nie oba te ustawienia naraz. Ograniczenie lokalizacji określa region, w którym muszą się znajdować wyniki, a preferencje lokalizacji określają region, w którym prawdopodobnie będą się znajdować wyniki lub w pobliżu którego będą się znajdować. Pamiętaj, że w przypadku korzystania z preferencji lokalizacji wyniki mogą nadal znajdować się poza określonym obszarem.

    Określ region jako prostokątny widoczny obszar lub jako koło.

    • Okrąg jest definiowany przez punkt środkowy i promień w metrach. Promień musi mieścić się w zakresie od 0,0 do 50 000,0 (włącznie). Na przykład:

      // 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();
    • Prostokąt to widoczny obszar określony przez szerokość i długość geograficzną, reprezentowany przez 2 przeciwległe punkty o niskich i wysokich wartościach. Punkt dolny oznacza południowo-zachodni róg prostokąta, a punkt górny – północno-wschodni róg prostokąta.

      Widoczny obszar jest uważany za zamknięty region, co oznacza, że obejmuje swoje granice. Zakres szerokości geograficznej musi mieścić się w przedziale od -90 do 90 stopni włącznie, a zakres długości geograficznej musi mieścić się w przedziale od -180 do 180 stopni włącznie:

      • Jeśli low = high, widoczny obszar składa się z tego pojedynczego punktu.
      • Jeśli low.longitude > high.longitude, zakres długości geograficznej jest odwrócony (widoczny obszar przekracza linię długości geograficznej 180 stopni).
      • Jeśli low.longitude = -180 stopni, a high.longitude = 180 stopni, widoczny obszar obejmuje wszystkie długości geograficzne.
      • Jeśli low.longitude = 180 stopni, a high.longitude = -180 stopni, zakres długości geograficznej jest pusty.
      • Jeśli low.latitude > high.latitude, zakres szerokości geograficznej jest pusty.

      Musisz podać dolną i górną wartość, a reprezentowane pole nie może być puste. Pusty obszar wyświetlania powoduje błąd.

      Na przykład w przypadku prostokątnego obszaru widoku zapoznaj się z informacjami o zapytaniach do wyszukiwania tekstowego.

      Aby ustawić parametr odchylenia lokalizacji, wywołaj metodę setLocationBias() podczas tworzenia obiektu SearchByTextRequest.

  • Ograniczenie dotyczące lokalizacji

    Określa obszar wyszukiwania. Wyniki spoza określonego obszaru nie są zwracane. Określ region jako prostokątny widoczny obszar. Informacje o definiowaniu obszaru widoku znajdziesz w opisie błędu lokalizacji.

    Możesz określić ograniczenie lokalizacji lub preferencje lokalizacyjne, ale nie oba te ustawienia naraz. Ograniczenie lokalizacji określa region, w którym muszą się znajdować wyniki, a odchylenie lokalizacji określa region, w pobliżu którego muszą się znajdować wyniki, ale mogą być poza tym obszarem.

    Aby ustawić parametr ograniczenia lokalizacji, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setLocationRestriction().

  • Maksymalna liczba wyników

    Określa maksymalną liczbę wyników dotyczących miejsc do zwrócenia. Musi mieścić się w przedziale od 1 do 20 (wartość domyślna) włącznie.

    Aby ustawić parametr maksymalnej liczby wyników, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setMaxResultCount().

  • Minimalna ocena

    Ogranicza wyniki tylko do tych, których średnia ocena użytkowników jest większa lub równa temu limitowi. Wartości muszą mieścić się w zakresie od 0,0 do 5,0 (włącznie) w przyrostach co 0,5. Na przykład: 0, 0,5, 1,0, ..., 5,0 włącznie. Wartości są zaokrąglane w górę do najbliższej liczby z końcówką 0,5. Na przykład wartość 0,6 eliminuje wszystkie wyniki z oceną poniżej 1,0.

    Aby ustawić parametr minimalnej oceny, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setMinRating().

  • Teraz otwarte

    Jeśli true, zwracaj tylko te miejsca, które są otwarte w momencie wysłania zapytania. Jeśli false, zwróć wszystkie firmy niezależnie od stanu otwarcia. Miejsca, które nie mają określonych godzin otwarcia w bazie danych Miejsc Google, są zwracane, jeśli ustawisz ten parametr na false.

    Aby ustawić parametr open_now, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setOpenNow().

  • Poziomy cen

    Domyślnie wyniki obejmują miejsca, w których usługi są świadczone na wszystkich poziomach cenowych. Aby ograniczyć wyniki do miejsc o określonych poziomach cen, możesz przekazać listę wartości całkowitych odpowiadających poziomom cen miejsc, które chcesz zwrócić:

    • 1 – miejsce oferuje niedrogie usługi.
    • 2 – miejsce oferuje usługi w umiarkowanych cenach.
    • 3 – miejsce oferuje drogie usługi.
    • 4 – miejsce oferuje bardzo drogie usługi.

    Aby ustawić parametr poziomów cenowych, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setPriceLevels().

  • Preferowany ranking

    Określa, w jaki sposób wyniki są klasyfikowane w odpowiedzi na podstawie typu zapytania:

    • W przypadku zapytania kategorycznego, np. „Restauracje w Nowym Jorku”, domyślną wartością jest SearchByTextRequest.RankPreference.RELEVANCE (sortowanie wyników według trafności wyszukiwania). Możesz ustawić preferencje dotyczące rankingu na SearchByTextRequest.RankPreference.RELEVANCE lub SearchByTextRequest.RankPreference.DISTANCE (sortowanie wyników według odległości).
    • W przypadku zapytań niekategorycznych, takich jak „Mountain View, CA”, zalecamy pozostawienie parametru preferencji rankingu bez ustawienia.

    Aby ustawić parametr preferencji rankingu, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setRankPreference().

  • Kod regionu

    Kod regionu używany do formatowania odpowiedzi, podany jako dwuznakowy kod CLDR. Ten parametr może też wpływać na wyniki wyszukiwania. Nie ma wartości domyślnej.

    Jeśli nazwa kraju w polu adresu w odpowiedzi jest zgodna z kodem regionu, kod kraju jest pomijany w adresie.

    Większość kodów CLDR jest identyczna z kodami ISO 3166-1, z kilkoma istotnymi wyjątkami. Na przykład krajowa domena najwyższego poziomu Zjednoczonego Królestwa to „uk” (.co.uk), a kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej”). W zależności od obowiązujących przepisów parametr może wpływać na wyniki.

    Aby ustawić parametr kodu regionu, podczas tworzenia obiektu SearchByTextRequest wywołaj metodę setRegionCode().

  • Filtrowanie ścisłe

    Używany z parametrem include type. Jeśli wartość tego parametru to true, zwracane są tylko miejsca pasujące do typów określonych przez parametr include type. Gdy wartość parametru to false (domyślnie), odpowiedź może zawierać miejsca, które nie pasują do określonych typów.

    Aby ustawić parametr filtrowania ścisłego typu, wywołaj metodę setStrictTypeFiltering() podczas tworzenia obiektu SearchByTextRequest.