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 ustawionych preferencji lokalizacji.
Oprócz wymaganych parametrów funkcja wyszukiwania tekstowego (nowa) obsługuje doprecyzowywanie zapytań za pomocą parametrów opcjonalnych, co pozwala uzyskać lepsze wyniki.
Usługa Wyszukaj tekst (New) jest podobna do Wyszukiwanie w pobliżu (New). Główna różnica między nimi polega na tym, że funkcja Wyszukaj tekst (nowa) umożliwia określenie dowolnego ciągu wyszukiwania, natomiast funkcja Wyszukiwanie w pobliżu (nowa) wymaga podania konkretnego obszaru wyszukiwania.
Żądania wyszukiwania tekstu
Żą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 -> { List<Place> places = response.getPlaces(); });
W tym przykładzie:
Ustaw listę pól tak, aby zawierała tylko
Place.Field.IDiPlace.Field.DISPLAY_NAME. Oznacza to, że obiektyPlacew odpowiedzi, które reprezentują każde pasujące miejsce, zawierają tylko te 2 pola.Użyj
SearchByTextRequest.Builder, aby utworzyć obiektSearchByTextRequest, 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 określonego przez współrzędne szerokości i długości geograficznej. Nie są zwracane żadne dopasowania spoza tego obszaru.
Dodaj
OnSuccessListeneri pobierz pasujące miejsca z obiektuSearchByTextResponse.
Odpowiedzi wyszukiwania tekstowego
Klasa SearchByTextResponse reprezentuje odpowiedź na żądanie wyszukiwania. Obiekt SearchByTextResponse zawiera:
Lista obiektów
Place, które reprezentują wszystkie pasujące miejsca, z jednym obiektemPlacena każde pasujące miejsce.Każdy obiekt
Placezawiera tylko pola zdefiniowane przez listę pól przekazaną w żądaniu.
Jeśli na przykład w żądaniu zdefiniujesz listę pól jako:
// 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() 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.
Podział na strony
Klasa SearchByTextResponse funkcji wyszukiwania tekstowego zapewnia dostęp do podziału na strony wyników wyszukiwania tekstowego za pomocą metody getPagination(), która zwraca obiekt Pagination.
Użyj metody hasNextPage() obiektu Pagination, aby sprawdzić, czy dostępne są dodatkowe strony wyników. Ta metoda zwraca wartość logiczną (true lub false).
Dopóki hasNextPage() zwraca wartość true, wywołuj 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: 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 } });
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.Fieldokreś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 projektowa, która pozwala uniknąć żądania niepotrzebnych danych, co pomaga uniknąć niepotrzebnego czasu przetwarzania i opłat.
Określ co najmniej jedno z tych pól:
Te pola aktywują SKU Wyszukaj tekst Essentials ID Only:
Place.Field.DISPLAY_NAME*
* Używaj zamiastPlace.Field.NAME(wycofanego w wersji 4.0).
Place.Field.ID
Place.Field.RESOURCE_NAME*
* Zawiera nazwę zasobu miejsca w formacie:places/PLACE_ID.
UżyjDISPLAY_NAME, aby uzyskać dostęp do nazwy tekstowej miejsca.Pełną listę pól i powiązanych z nimi kodów SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Te pola aktywują SKU Wyszukaj tekst Pro:
Place.Field.ACCESSIBILITY_OPTIONS*
Używaj zamiastPlace.Field.WHEELCHAIR_ACCESSIBLE_ENTRANCE(wycofano).
Place.Field.ADDRESS_COMPONENTS
Place.Field.ADR_FORMAT_ADDRESS
Place.Field.BUSINESS_STATUS
Place.Field.FORMATTED_ADDRESS*
Używaj zamiastPlace.Field.ADDRESS(wycofano).
Place.Field.GOOGLE_MAPS_URI
Place.Field.ICON_BACKGROUND_COLOR
Place.Field.ICON_MASK_URL*
Używaj zamiastPlace.Field.ICON_URL(wycofano).
Place.Field.LOCATION*
Używaj zamiastPlace.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.VIEWPORTPełną listę pól i powiązanych z nimi kodów SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Te pola aktywują SKU Wyszukaj tekst Enterprise:
Place.Field.CURRENT_OPENING_HOURS
Place.Field.CURRENT_SECONDARY_OPENING_HOURS
Place.Field.INTERNATIONAL_PHONE_NUMBER*
* Używaj zamiast wycofanego parametruPlace.Field.PHONE_NUMBER.
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żywaj zamiast wycofanego parametruPlace.Field.USER_RATINGS_TOTAL.
Place.Field.WEBSITE_URIPełną listę pól i powiązanych z nimi kodów SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Te pola aktywują SKU Wyszukaj tekst 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.TAKEOUTPełną listę pól i powiązanych z nimi kodów SKU znajdziesz w artykule Pola danych o miejscach (nowe).
Aby ustawić parametr listy pól, wywołaj metodę
setPlaceFields()podczas tworzenia obiektuSearchByTextRequest. -
Zapytanie tekstowe
Ciąg tekstowy, który ma zostać wyszukany, np. „restauracja”, „ul. Główna 123” lub „najlepsze miejsce do odwiedzenia w San Francisco”. Interfejs API zwraca dopasowania kandydatów na podstawie tego ciągu znaków i porządkuje wyniki według ich trafności.
Aby ustawić parametr zapytania tekstowego, wywołaj metodę
setTextQuery()podczas tworzenia obiektuSearchByTextRequest.
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 jeden typ. Na przykład:
setIncludedType("bar")setIncludedType("pharmacy")
Aby ustawić parametr uwzględnionego typu, wywołaj metodę
setIncludedType()podczas tworzenia obiektuSearchByTextRequest.Błąd związany z lokalizacją
Określa obszar wyszukiwania. Ta lokalizacja służy jako odchylenie, co oznacza, że mogą być zwracane wyniki dotyczące określonej lokalizacji, w tym wyniki spoza określonego obszaru.
Możesz określić ograniczenie lokalizacji lub preferencję lokalizacji, ale nie obie te opcje. Ograniczenie lokalizacji określa region, w którym muszą znajdować się wyniki, a preferencja lokalizacji określa region, w którym wyniki prawdopodobnie będą się znajdować lub w którego pobliżu będą się znajdować. Pamiętaj, że w przypadku preferencji lokalizacji wyniki mogą nadal znajdować się poza określonym obszarem.
Określ region jako prostokątny widoczny obszar lub okrąg.
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 szerokości i długości geograficznej, reprezentowany przez 2 przeciwległe punkty po przekątnej. Punkt dolny oznacza południowo-zachodni róg prostokąta, a punkt górny – północno-wschodni.
Widoczny obszar jest uważany za region zamknięty, co oznacza, że obejmuje on swoje granice. Szerokość geograficzna musi mieścić się w zakresie od -90 do 90 stopni, a długość geograficzna – od -180 do 180 stopni:
- 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, ahigh.longitude= 180 stopni, widoczny obszar obejmuje wszystkie długości geograficzne. - Jeśli
low.longitude= 180 stopni, ahigh.longitude= –180 stopni, zakres długości geograficznej jest pusty. - Jeśli
low.latitude>high.latitude, zakres szerokości geograficznej jest pusty.
Należy podać zarówno wartość dolną, jak i górną, a reprezentowane pole nie może być puste. Pusty widoczny obszar powoduje błąd.
Przykład prostokątnego widocznego obszaru znajdziesz w artykule o żądaniach wyszukiwania tekstu.
Aby ustawić parametr lokalizacji, wywołaj metodę
setLocationBias()podczas tworzenia obiektuSearchByTextRequest.- Jeśli
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 widocznego obszaru znajdziesz w opisie preferencji lokalizacji.
Możesz określić ograniczenie lokalizacji lub preferencję lokalizacji, ale nie obie te opcje. Ograniczenie lokalizacji określa region, w którym muszą znajdować się wyniki, a lokalizacja preferowana określa region, w pobliżu którego muszą znajdować się wyniki, ale mogą znajdować się poza nim.
Aby ustawić parametr ograniczenia lokalizacji, wywołaj metodę
setLocationRestriction()podczas tworzenia obiektuSearchByTextRequest.-
Maksymalna liczba wyników
Określa maksymalną liczbę wyników dotyczących miejsc, które mają zostać zwrócone. Musi należeć do zakresu od 1 do 20 (domyślnie) włącznie.
Aby ustawić parametr maksymalnej liczby wyników, wywołaj metodę
setMaxResultCount()podczas tworzenia obiektuSearchByTextRequest. 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) i być wielokrotnością 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.
Aby ustawić parametr minimalnej oceny, wywołaj metodę
setMinRating()podczas tworzenia obiektuSearchByTextRequest.Teraz otwarte
Jeśli ma wartość
true, zwracane są tylko te miejsca, które są otwarte w momencie wysłania zapytania. Jeślifalse, zwróć wszystkie firmy niezależnie od stanu otwarcia. Jeśli ustawisz ten parametr nafalse, zwracane będą miejsca, które nie mają określonych godzin otwarcia w bazie danych Miejsc Google.Aby ustawić parametr „otwarte teraz”, wywołaj metodę
setOpenNow()podczas tworzenia obiektuSearchByTextRequest.-
Poziomy cenowe
Domyślnie wyniki obejmują miejsca, które świadczą usługi na wszystkich poziomach cenowych. Aby ograniczyć wyniki tylko do miejsc o określonych poziomach cen, możesz przekazać listę wartości całkowitych, które odpowiadają 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 cen, wywołaj metodę
setPriceLevels()podczas tworzenia obiektuSearchByTextRequest. Preferencje dotyczące rankingu
Określa, jak wyniki są porządkowane w odpowiedzi na podstawie typu zapytania:
- W przypadku zapytania kategorialnego, takiego jak „Restauracje w Nowym Jorku”, domyślną wartością jest
SearchByTextRequest.RankPreference.RELEVANCE(wyniki są sortowane według trafności wyszukiwania). Możesz ustawić preferencje rankingu naSearchByTextRequest.RankPreference.RELEVANCElubSearchByTextRequest.RankPreference.DISTANCE(ranking wyników według odległości). - W przypadku zapytania, które nie dotyczy kategorii, np. „Mountain View, CA”, zalecamy pozostawienie parametru preferencji rankingu bez ustawienia.
Aby ustawić parametr preferencji rankingu, wywołaj metodę
setRankPreference()podczas tworzenia obiektuSearchByTextRequest.- W przypadku zapytania kategorialnego, takiego jak „Restauracje w Nowym Jorku”, domyślną wartością jest
Kod regionu
Kod regionu używany do formatowania odpowiedzi, określony 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 wyjątkami. Na przykład domena ccTLD Wielkiej Brytanii to „uk” (.co.uk), a jej kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej”). Parametr może wpływać na wyniki na podstawie obowiązujących przepisów.
Aby ustawić parametr kodu regionu, wywołaj metodę
setRegionCode()podczas tworzenia obiektuSearchByTextRequest.Ścisłe filtrowanie typów
Używany z parametrem include type. Jeśli jest ustawiony na
true, zwracane są tylko miejsca, które pasują do określonych typów określonych przez typ uwzględnienia. Jeśli ustawisz wartość domyślnąfalse, odpowiedź może zawierać miejsca, które nie pasują do określonych typów.Aby ustawić parametr ścisłego filtrowania typów, wywołaj metodę
setStrictTypeFiltering()podczas tworzenia obiektuSearchByTextRequest.