Wyszukaj tekst

Wyszukiwanie tekstowe zwraca informacje o zbiorze miejsc na podstawie ciągu znaków, np. „pizza w Warszawie”, „sklepy obuwnicze w pobliżu Ottawy” lub „ulica Główna 123”. W odpowiedzi usługa przedstawia listę miejsc pasujących do ciągu tekstowego i ustawione odchylenie do lokalizacji.

Usługa jest szczególnie przydatna do tworzenia niejednoznacznych zapytań adresowych w automatycznym systemie. Elementy inne niż adresowe w ciągu znaków mogą odpowiadać zarówno firmom, jak i adresom. Przykładami niejednoznacznych zapytań adresowych są niewłaściwie sformatowane adresy lub żądania zawierające elementy niebędące adresami, takie jak nazwy firm. Żądania takie jak w 2 pierwszych przykładach mogą zwracać zero wyników, chyba że ustawisz lokalizację – taką jak region, ograniczenie lokalizacji lub odchylenie lokalizacji.

„ul. Główna 10, Wielka Brytania” lub „ul. Główna 123, Polska” Wiele ulic „High Street” w Wielkiej Brytanii i wiele „głównych” w Stanach Zjednoczonych. Zapytanie nie zwraca pożądanych wyników, chyba że ustawione jest ograniczenie lokalizacji.
„SiećRestauracji Warszawa” Wiele lokalizacji „Sieć restauracji” w Nowym Jorku, bez adresu ani nazwy ulicy.
„ul. Główna 10, Katowice” lub „ul. Główna 123, Warszawa” Tylko jedna „Główna ulica” w mieście Escher w Wielkiej Brytanii i tylko jedna „ulica główna” w mieście Pleasanton w Kalifornii.
„Unikalna Nazwa Restauracji Warszawa” Tylko jeden obiekt z taką nazwą w Warszawie. Nie trzeba podawać adresu, aby je rozróżnić.
„pizzeria w Krakowie” To zapytanie zawiera ograniczenie lokalizacji, a „pizzeria” jest dokładnie zdefiniowanym typem miejsca. Zwraca wiele wyników.
„+1 514-670-8700”

To zapytanie zawiera numer telefonu. Zwraca wiele wyników wyszukiwania miejsc powiązanych z tym numerem telefonu.

Żądania wyszukiwania tekstowego

Prośba o wyszukiwanie tekstowe ma postać:

// Specify the list of fields to return.
final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.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();
    });

W tym przykładzie:

  • Ustaw listę pól tak, aby zawierała tylko pola Place.Field.ID i Place.Field.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 określa wyszukiwanie.

    • Ustaw ciąg zapytania tekstowego na „Azjatyckie dania wegetariańskie”.

    • Ustaw maksymalną liczbę miejsc wyników na 10. Wartości domyślne i maksymalne to 20.

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

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

Odpowiedzi dotyczące wyszukiwania tekstu

Klasa SearchByTextResponse reprezentuje odpowiedź z żądania wyszukiwania. Obiekt SearchByTextResponse zawiera:

  • Lista obiektów Place, które reprezentują wszystkie pasujące miejsca, z 1 obiektem Place na każde pasujące miejsce.

  • Każdy obiekt Place zawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.

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

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

Ta lista pól oznacza, że każdy obiekt Place w odpowiedzi zawiera tylko identyfikator i nazwę każdego pasującego miejsca. Następnie możesz użyć metod Place.getId() i 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.

Wymagane parametry

  • Lista pól

    Określ, które pola danych miejsc mają zostać zwrócone. Przekaż listę wartości Place.Field określających pola danych do zwrócenia. W odpowiedzi nie ma domyślnej listy zwróconych pól.

    Listy pól to dobra metoda projektowania, która pozwala uniknąć żądania zbędnych danych, co pozwala uniknąć niepotrzebnego czasu przetwarzania i opłat.

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

    • Poniższe pola wywołują kod SKU wyszukiwania tekstowego (tylko identyfikator):

      Place.Field.ID, Place.Field.NAME
    • Poniższe pola wywołują kod SKU wyszukiwania tekstowego (podstawowe):

      Place.Field.ADDRESS_COMPONENTS, Place.Field.BUSINESS_STATUS, Place.Field.ADDRESS, Place.Field.ICON_BACKGROUND_COLOR, Place.Field.ICON_URL, Place.Field.LAT_LNG, Place.Field.PHOTO_METADATAS, Place.Field.PLUS_CODE, Place.Field.TYPES, Place.Field.UTC_OFFSET, Place.Field.VIEWPORT, Place.Field.WHEELCHAIR_ACCESSIBLE_ENTRANCE
    • Poniższe pola aktywują kod SKU wyszukiwania tekstowego (zaawansowane):

      Place.Field.CURRENT_OPENING_HOURS, Place.Field.SECONDARY_OPENING_HOURS, Place.Field.PHONE_NUMBER, Place.Field.PRICE_LEVEL, Place.Field.RATING, Place.Field.OPENING_HOURS, Place.Field.USER_RATINGS_TOTAL, Place.Field.WEBSITE_URI
    • Następujące pola wywołują kod SKU wyszukiwania tekstowego (preferowane):

      Place.Field.CURBSIDE_PICKUP, Place.Field.DELIVERY, Place.Field.DINE_IN, Place.Field.EDITORIAL_SUMMARY, Place.Field.RESERVABLE, Place.Field.REVIEWS, Place.Field.SERVES_BEER, Place.Field.SERVES_BREAKFAST, Place.Field.SERVES_BRUNCH, Place.Field.SERVES_DINNER, Place.Field.SERVES_LUNCH, Place.Field.SERVES_VEGETARIAN_FOOD, Place.Field.SERVES_WINE, Place.Field.TAKEOUT
  • Zapytanie tekstowe

    Ciąg tekstowy, który należy wyszukać, na przykład „restauracja”, „ulica Główna 123” lub „najlepsze miejsce w Krakowie”. Interfejs API zwraca kandydujące dopasowania na podstawie tego ciągu i porządkuje wyniki na podstawie ich postrzeganej trafności.

Parametry opcjonalne

Ustaw te parametry, używając metod SearchByTextRequest.Builder. Aby na przykład ustawić maksymalną liczbę wyników, wywołaj metodę SearchByTextRequest.Builder.setMaxResultCount().

  • Uwzględniony typ

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

    • setIncludedType("bar")
    • setIncludedType("pharmacy")
  • Wpływ na lokalizację

    Określa obszar wyszukiwania. Ta lokalizacja jest odchyleniem, co oznacza, że mogą być zwracane wyniki dotyczące określonej lokalizacji, w tym wyniki spoza określonego obszaru.

    Możesz określić ograniczenie lub promowanie lokalizacji, ale nie obie te wartości jednocześnie. Ograniczenie dotyczące lokalizacji określa region, w którym muszą znajdować się wyniki, a odchylenie lokalizacji – region, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza danym obszarem.

    Określ region jako prostokątny widoczny obszar lub okrąg.

    • Okrąg jest określony przez punkt środkowy i promień w metrach. Promień musi mieścić się w zakresie od 0,0 do 50 000,0 włącznie. Domyślny promień to 0,0. 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 o długości i szerokości geograficznej, wyrażony jako 2 położone po przekątnej naprzeciwległości najniższego i najwyższego punktu. Najniższy punkt oznacza południowo-zachodni róg prostokąta, a najwyższy – północno-wschodni róg prostokąta.

      Widoczny obszar jest traktowany jako zamknięty obszar, co oznacza, że obejmuje swoją granicę. Granice szerokości geograficznej muszą mieścić się w zakresie od -90 do 90 stopni włącznie, a długość geograficzna – 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 przecina linię długości 180 stopni).
      • Jeśli low.longitude = -180 stopni, high.longitude = 180 stopni, widoczny obszar obejmuje wszystkie długości geograficzne.
      • Jeśli low.longitude = 180 stopni i high.longitude = -180 stopni, zakres długości geograficznej jest pusty.
      • Jeśli low.latitude > high.latitude, zakres szerokości geograficznej jest pusty.

      Musisz wypełnić zarówno niski, jak i najwyższy poziom, a reprezentowane pole nie może być puste. Pusty widoczny obszar powoduje wystąpienie błędu.

      Na przykład dla prostokątnego widocznego obszaru zapoznaj się z sekcją Żądania wyszukiwania tekstu.

  • Ograniczenie lokalizacji

    Określa obszar wyszukiwania. Wyniki spoza określonego obszaru nie są zwracane. Określ region jako prostokątny widoczny obszar. Aby dowiedzieć się, jak definiować widoczny obszar, zapoznaj się z opisem w sekcji Wpływ na lokalizację.

    Możesz określić ograniczenie lub promowanie lokalizacji, ale nie obie te wartości jednocześnie. Ograniczenie lokalizacji definiuje się jako region, w którym muszą znajdować się wyniki, a odchylenie lokalizacji – region, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza danym obszarem.

  • Maksymalna liczba wyników

    Określa maksymalną liczbę zwracanych wyników wyszukiwania miejsc. Wartość musi mieścić się w przedziale od 1 do 20 (domyślnie) włącznie.

  • Minimalna ocena

    Ogranicza wyniki tylko do tych, których średnia ocena użytkowników jest większa od tego limitu lub jej równa. 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 wielokrotności 0,5. Na przykład wartość 0,6 eliminuje wszystkie wyniki z oceną mniejszą niż 1,0.

  • Teraz otwarte

    Jeśli true, zwraca tylko te miejsca, które w momencie wysyłania zapytania są otwarte. Jeśli wartość to false, zwróć wszystkie firmy niezależnie od tego, czy są otwarte. Jeśli ustawisz ten parametr na false, zwracane są miejsca, które w bazie danych Miejsc Google nie mają określonych godzin otwarcia.

  • Poziomy cen

    Ogranicz wyszukiwanie do miejsc z określonymi cenami. Domyślnie wybrane są wszystkie poziomy cen.

    Określ listę zawierającą co najmniej jedną z tych wartości liczbowych:

    • 1–PRICE_LEVEL_INEXPENSIVE
    • 2 – PRICE_LEVEL_MODERATE
    • 3 – PRICE_LEVEL_EXPENSIVE
    • 4 – PRICE_LEVEL_VERY_EXPENSIVE
  • Preferowana pozycja

    Określa sposób wyznaczania pozycji wyników w odpowiedzi. W stosownych przypadkach interfejs API domyślnie używa atrybutu RELEVANCE. Na przykład w przypadku zapytania „Restauracje w Nowym Jorku” domyślną wartością jest RELEVANCE. W przypadku zapytań geograficznych, np. „Mountain View, CA”, lub innego typu zapytań, wartość domyślna nie jest stosowana, a wyniki są wyświetlane w kolejności, w jakiej są zwracane przez backend.

    Dostępne wartości:

    • SearchByTextRequest.RankPreference.DISTANCE: uporządkuj wyniki według odległości.
    • SearchByTextRequest.RankPreference.RELEVANCE: uporządkuj wyniki według trafności.
  • Kod regionu

    Kod regionu używany do formatowania odpowiedzi, określony jako dwuznakowy kod CLDR. Ten parametr może też mieć wpływ na wyniki wyszukiwania. Brak 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 wyjątkami. Na przykład domena ccTLD w Wielkiej Brytanii to „uk” (.co.uk), a kod ISO 3166-1 to „gb” (technicznie oznaczający jednostkę „Wielka Brytania i Irlandia Północna”). Parametr może wpływać na wyniki w zależności od obowiązującego prawa.

  • Rygorystyczne filtrowanie typów

    Używane z parametrem uwzględniania. Gdy ma wartość true, zwracane są tylko miejsca pasujące do określonych typów określonych przez typ uwzględniania. Gdy false jest wartością domyślną, odpowiedź może zawierać miejsca, które nie pasują do określonych typów.