Wyszukiwanie tekstowe (nowe) zwraca informacje o zestawie miejsc na podstawie ciągu znaków, takiego jak „pizza w Warszawie”, „sklepy obuwnicze w okolicy Ottawy” lub „ul. Główna 123”. W odpowiedzi usługa przesyła listę miejsc pasujących do ciągu tekstowego i wszelkie ustawione odchylenie od lokalizacji.
Ta usługa jest szczególnie przydatna do wysyłania niejednoznacznych zapytań o adres w automatycznym systemie, a komponenty niebędące adresem w ciągu znaków mogą pasować zarówno do firm, jak i adresów. Przykładami niejednoznacznych zapytań dotyczących adresu są źle sformatowane adresy lub żądania zawierające składniki niebędące adresem, np. nazwy firm. Żądania takie jak pierwsze 2 przykłady mogą nie zwracać żadnych wyników, chyba że zostanie ustawiona lokalizacja – na przykład region, ograniczenie lokalizacji lub korekta lokalizacji.
Wyszukiwanie tekstowe (nowość) jest podobne do wyszukiwania w pobliżu (nowość). Główna różnica między nimi polega na tym, że wyszukiwanie tekstowe (nowość) pozwala określić dowolny ciąg wyszukiwania, a Wyszukiwanie w pobliżu (nowość) wymaga określonego obszaru wyszukiwania.
„ul. Główna 10, Wielka Brytania” lub „ul. Główna 123, USA” | Wiele „ul. Głównej” w Wielkiej Brytanii i kilka ulic „Main Street” w Stanach Zjednoczonych. Zapytanie nie zwraca pożądanych wyników, jeśli nie ustawiono ograniczenia lokalizacji. |
„Restauracja sieciowa Warszawa” | Wiele lokalizacji „ChainRestaurant” w Nowym Jorku, bez adresu czy nawet nazwy ulicy. |
„ul. Główna 10, Warszawa” lub „ul. Główna 123, Pleasanton PL” | W mieście Escher w Wielkiej Brytanii tylko jedna „High Street” i tylko jedna „Main Street” w amerykańskim mieście Pleasanton, Kalifornia. |
„UniqueRestaurantName Warszawa” | Tylko 1 instytucja o tej nazwie w Nowym Jorku; do odróżnienia nie trzeba podawać adresu. |
„pizzerie w Warszawie” | To zapytanie zawiera ograniczenie lokalizacji, a „pizzeria” jest dobrze zdefiniowanym typem miejsca. Zwraca wiele wyników. |
„+1 514-670-8700” | To zapytanie zawiera numer telefonu. Zwraca ono wiele wyników dotyczących miejsc powiązanych z tym numerem telefonu. |
Żą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.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
iPlace.Field.NAME
. Oznacza to, że obiektyPlace
w odpowiedzi, które reprezentują każde pasujące miejsce, zawierają tylko te 2 pola.Użyj narzędzia
SearchByTextRequest.Builder
, aby utworzyć obiektSearchByTextRequest
definiujący wyszukiwanie.Ustaw ciąg zapytania „pikantne potrawy wegetariańskie”.
Ustaw maksymalną liczbę miejsc z wynikami na 10. Wartością domyślną i maksymalną jest 20.
Ogranicz obszar wyszukiwania do prostokąta zdefiniowanego przez współrzędne szerokości i długości geograficznej. Dopasowania spoza tego obszaru nie są zwracane.
Dodaj
OnSuccessListener
i pobierz pasujące miejsca z obiektuSearchByTextResponse
.
Odpowiedzi na wyszukiwanie tekstowe
Klasa SearchByTextResponse
reprezentuje odpowiedź na żądanie wyszukiwania. Obiekt SearchByTextResponse
zawiera:
Lista obiektów
Place
reprezentujących wszystkie pasujące miejsca, z 1 obiektemPlace
na 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 jako:
// 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 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 Miejsca.
Wymagane parametry
Wymagane parametry parametru SearchByTextRequest
:
-
Lista pól
Określ pola danych o miejscach, które mają być zwracane. Przekaż listę wartości
Place.Field
określającą pola danych do zwrócenia. Odpowiedź nie zawiera domyślnej listy zwróconych pól.Listy pól to sprawdzona metoda projektowania, dzięki której nie żądasz zbędnych danych. Pozwala to uniknąć niepotrzebnego czasu przetwarzania i opłat.
Wypełnij co najmniej jedno z tych pól:
Następujące pola aktywują kod SKU wyszukiwania tekstowego (tylko identyfikator):
Place.Field.ID
,Place.Field.NAME
Te pola aktywują kod SKU wyszukiwania tekstowego (podstawowego):
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
Te 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
Te pola aktywują kod SKU wyszukiwania tekstowego (preferowany):
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
Aby ustawić parametr listy pól, wywołaj metodę
setPlaceFields()
podczas tworzenia obiektuSearchByTextRequest
. -
Zapytanie tekstowe
Ciąg tekstowy, który ma zostać wyszukany, na przykład: „restauracja”, „ulica Główna 123” lub „najlepsze miejsce do odwiedzenia w Krakowie”. Interfejs API zwraca dopasowania kandydatów na podstawie tego ciągu znaków i porządkuje wyniki według ich postrzeganej trafności.
Aby ustawić tekstowy parametr zapytania, wywołaj metodę
setTextQuery()
podczas tworzenia obiektuSearchByTextRequest
.
Parametry opcjonalne
Za pomocą obiektu SearchByTextRequest
określ opcjonalne parametry żądania.
Uwzględniony typ
Ogranicza wyniki do miejsc pasujących do określonego typu określonego w tabeli A. Można podać tylko jeden typ. Na przykład:
setIncludedType("bar")
setIncludedType("pharmacy")
Aby ustawić uwzględniony typ parametru, wywołaj metodę
setIncludedType()
podczas tworzenia obiektuSearchByTextRequest
.Korekta lokalizacji
Określa obszar wyszukiwania. Ta lokalizacja działa 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 promowanie przez lokalizację, ale nie jedno i drugie. O ograniczeniu lokalizacji chodzi o określenie regionu, w którym muszą się znajdować wyniki, a zniekształcenia lokalizacji – do określenia regionu, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza danym obszarem.
Określ region jako prostokątny widoczny lub okrągły obszar.
Okrąg jest wyznaczany 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 o długości i szerokości geograficznej, przedstawiony jako dwa punkty po przekątnej, znajdujące się naprzeciwko dolnego i wyższego punktu. Punkt dolny oznacza południowy róg prostokąta, a najwyższy – północno-wschodni róg prostokąta.
Widoczny obszar jest uważany za obszar zamknięty, co oznacza, że obejmuje swoją granicę. Granice szerokości geograficznej muszą mieścić się w przedziale od -90 do 90 stopni włącznie, a granice długości geograficznej 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 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.
Musisz wypełnić zarówno niskie, jak i wysokie wartości, a reprezentowane pole nie może być puste. Gdy to zrobisz, pojawi się błąd.
Na przykład prostokątnego widocznego obszaru znajdziesz w sekcji Żądania wyszukiwania tekstowego.
Aby ustawić parametr odchylenia lokalizacji, wywołaj metodę
setLocationBias()
podczas tworzenia obiektuSearchByTextRequest
.- Jeśli
Ograniczenie dotyczące lokalizacji
Określa obszar wyszukiwania. Wyniki spoza określonego obszaru nie będą zwracane. Wskaż region jako prostokątny widoczny obszar. Informacje o definiowaniu widocznego obszaru znajdziesz w opisie odchylenia lokalizacji.
Możesz określić ograniczenie lokalizacji lub promowanie przez lokalizację, ale nie jedno i drugie. O ograniczeniu lokalizacji chodzi o określenie regionu, w którym muszą się znajdować wyniki, a zniekształcenia lokalizacji – do określenia regionu, w którym wyniki muszą znajdować się w pobliżu, ale mogą znajdować się poza tym obszarem.
Aby ustawić parametr ograniczenia lokalizacji, wywołaj metodę
setLocationRestriction()
podczas tworzenia obiektuSearchByTextRequest
.-
Maksymalna liczba wyników
Określa maksymalną liczbę wyników miejsc do zwrócenia. Wartość musi mieścić się w przedziale 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 wyższa 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 o ocenie niższej niż 1,0.
Aby ustawić parametr minimalnej oceny, podczas tworzenia obiektu
SearchByTextRequest
wywołaj metodęsetMinRating()
.Teraz otwarte
Jeśli ustawiona zostanie wartość
true
, zwróć tylko te miejsca, które są otwarte w momencie wysyłania zapytania. W przypadku wartościfalse
zwróć wszystkie firmy niezależnie od tego, czy są otwarte. Miejsca, które nie określają godzin otwarcia w bazie danych Miejsc Google, są zwracane, jeśli ustawisz ten parametr na wartośćfalse
.Aby ustawić parametr Otwórz teraz, wywołaj metodę
setOpenNow()
podczas tworzenia obiektuSearchByTextRequest
.-
Poziomy cen
Domyślnie wyniki obejmują miejsca, które świadczą usługi na wszystkich poziomach cen. Aby ograniczyć wyniki tak, aby obejmowały tylko miejsca na określonych poziomach cen, możesz przekazać listę wartości liczb całkowitych odpowiadających poziomom cen miejsc, które chcesz zwrócić:
1
– firma świadczy niedrogie usługi.2
– miejsce świadczy usługi w umiarkowanych cenach.3
– firma świadczy drogie usługi.4
– miejsce świadczy bardzo drogie usługi.
Aby ustawić parametr poziomów cen, wywołaj metodę
setPriceLevels()
podczas tworzenia obiektuSearchByTextRequest
. Preferencja rankingu
Określa kolejność wyników w odpowiedzi na podstawie typu zapytania:
- W przypadku zapytania kategorialnego, takiego jak „Restauracje w Nowym Jorku”, domyślna wartość to
SearchByTextRequest.RankPreference.RELEVANCE
(ranking wyników według trafności wyszukiwania). Możesz ustawić preferencje pozycji w rankingu naSearchByTextRequest.RankPreference.RELEVANCE
lubSearchByTextRequest.RankPreference.DISTANCE
(ranking wyników według dystansu). - W przypadku zapytania niezwiązanego z kategorią, np. „Mountain View, CA”, zalecamy pozostawienie parametru preferencji pozycji nieskonfigurowanej.
Aby ustawić parametr preferencji pozycji, podczas tworzenia obiektu
SearchByTextRequest
wywołaj metodęsetRankPreference()
.- W przypadku zapytania kategorialnego, takiego jak „Restauracje w Nowym Jorku”, domyślna wartość to
Kod regionu
Kod regionu używany do formatowania odpowiedzi podany jako wartość dwuznakowego kodu CLDR. Ten parametr może też mieć wpływ 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 zostanie pominięty 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 kod ISO 3166-1 to „gb” (technicznie dla podmiotu „Wielka Brytania i Irlandia Północna”). Ten parametr może wpływać na wyniki w zależności od obowiązującego prawa.
Aby ustawić parametr kodu regionu, wywołaj metodę
setRegionCode()
podczas tworzenia obiektuSearchByTextRequest
.Ścisłe filtrowanie typów
Używana z parametrem typu uwzględniania. Jeśli ustawisz wartość
true
, zwracane będą tylko miejsca, które pasują do określonych typów uwzględniania. Gdy wartością domyślną jestfalse
, odpowiedź może zawierać miejsca, które nie pasują do określonych typów.Aby ustawić parametr filtrowania typu ścisłego, wywołaj metodę
setStrictTypeFiltering()
podczas tworzenia obiektuSearchByTextRequest
.