Wyszukiwanie tekstu (nowość)

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 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 narzędzia SearchByTextRequest.Builder, aby utworzyć obiekt SearchByTextRequest 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 obiektu SearchByTextResponse.

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 obiektem Place 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 obiektu SearchByTextRequest.

  • 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 obiektu SearchByTextRequest.

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 obiektu SearchByTextRequest.

  • 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, 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 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 obiektu SearchByTextRequest.

  • 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 obiektu SearchByTextRequest.

  • 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 obiektu SearchByTextRequest.

  • 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ści false 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 obiektu SearchByTextRequest.

  • 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 obiektu SearchByTextRequest.

  • 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 na SearchByTextRequest.RankPreference.RELEVANCE lub SearchByTextRequest.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().

  • 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 obiektu SearchByTextRequest.

  • Ś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ą jest false, 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 obiektu SearchByTextRequest.