Tìm kiếm văn bản (Mới)

Chọn nền tảng: Android iOS JavaScript Dịch vụ web

Tìm kiếm văn bản (Mới) trả về thông tin về một tập hợp địa điểm dựa trên một chuỗi — ví dụ: "pizza ở New York" hoặc "cửa hàng giày gần Ottawa" hoặc "123 Main Street". Dịch vụ này sẽ phản hồi bằng một danh sách các địa điểm khớp với chuỗi văn bản và bất kỳ sai lệch vị trí nào đã được đặt.

Dịch vụ này đặc biệt hữu ích khi tạo địa chỉ không rõ ràng truy vấn trong một hệ thống tự động. và các thành phần không có địa chỉ của chuỗi có thể khớp với doanh nghiệp cũng như của bạn. Ví dụ về truy vấn địa chỉ không rõ ràng là địa chỉ được định dạng kém hoặc yêu cầu có chứa các thành phần không có địa chỉ như tên doanh nghiệp. Yêu cầu như hai ví dụ đầu tiên có thể trả về kết quả bằng 0 trừ khi một vị trí — chẳng hạn như khu vực, hạn chế về vị trí hoặc sai lệch về vị trí — được đặt.

Tìm kiếm văn bản (Mới) tương tự như tính năng Tìm kiếm lân cận (Mới). Chính sự khác biệt giữa hai công cụ này là Tìm kiếm văn bản (Mới) cho phép bạn chỉ định một chuỗi tìm kiếm tuỳ ý trong khi tính năng Tìm kiếm lân cận (Mới) yêu cầu một khu vực cụ thể cần tìm kiếm.

"10 High Street, Vương quốc Anh" hoặc "123 Main Street, Hoa Kỳ" Nhiều "Đường cao tốc" ở Vương quốc Anh; nhiều "Phố chính" ở Hoa Kỳ. Truy vấn không trả về kết quả mong muốn trừ phi có quy định hạn chế về vị trí thiết lập.
"ChainRestaurant New York" Nhiều "ChainRestaurant" các địa điểm ở New York; không có địa chỉ đường phố hoặc thậm chí cả tên đường phố.
"10 High Street, Escher UK" hoặc "123 Main Street, Pleasanton US" Chỉ một "Đường thông cao" ở thành phố Escher của Vương quốc Anh; chỉ một "Phố Chính" ở thành phố Pleasanton CA của Hoa Kỳ.
" UniqueRestaurantName New York" Chỉ một cơ sở có tên này ở New York; không có địa chỉ đường phố cần thiết để phân biệt.
"nhà hàng pizza ở New York" Truy vấn này chứa giới hạn vị trí và "nhà hàng pizza" là một loại địa điểm được xác định rõ ràng. Hàm này trả về nhiều kết quả.
"+1 514-670-8700"

Truy vấn này có chứa số điện thoại. Hàm này trả về nhiều kết quả cho địa điểm được liên kết với số điện thoại đó.

Yêu cầu Tìm kiếm văn bản

Yêu cầu Tìm kiếm văn bản có trong biểu mẫu:

// 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();
    });

Trong ví dụ này, bạn:

  • Thiết lập danh sách trường để chỉ bao gồm Place.Field.IDPlace.Field.NAME. Tức là các đối tượng Place trong phản hồi đại diện cho từng kết quả trùng khớp chỉ chứa hai trường đó.

  • Sử dụng SearchByTextRequest.Builder để tạo một SearchByTextRequest đối tượng xác định tìm kiếm.

    • Đặt chuỗi truy vấn văn bản thành "Sngy Vegetarian Food".

    • Đặt số lượng vị trí kết quả tối đa thành 10. Phương thức mặc định và tối đa là 20.

    • Giới hạn khu vực tìm kiếm ở hình chữ nhật được xác định theo vĩ độ và kinh độ. Không có kết quả phù hợp nào nằm ngoài khu vực này được trả về.

  • Thêm OnSuccessListener và nhận các địa điểm phù hợp từ SearchByTextResponse .

Câu trả lời trên tính năng Tìm kiếm bằng văn bản

Chiến lược phát hành đĩa đơn SearchByTextResponse thể hiện phản hồi từ một yêu cầu tìm kiếm. Một SearchByTextResponse đối tượng chứa:

  • Danh sách đối tượng Place đại diện cho tất cả địa điểm trùng khớp, trong đó có một địa điểm Place đối tượng cho mỗi địa điểm phù hợp.

  • Mỗi đối tượng Place chỉ chứa các trường được xác định bằng danh sách trường được chuyển trong yêu cầu.

Ví dụ: trong yêu cầu, bạn đã xác định một danh sách trường là:

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

Danh sách trường này có nghĩa là mỗi đối tượng Place trong phản hồi chỉ chứa mã địa điểm và tên của từng địa điểm phù hợp. Sau đó, bạn có thể dùng Place.getId() và phương thức Place.getName() để truy cập vào các trường này trong từng đối tượng Place.

Để biết thêm ví dụ về cách truy cập dữ liệu trong đối tượng Place, hãy xem bài viết Truy cập địa điểm trường dữ liệu đối tượng

Thông số bắt buộc

Các tham số bắt buộc cho SearchByTextRequest là:

  • Danh sách trường

    Chỉ định những trường dữ liệu địa điểm cần trả về. Truyền danh sách Place.Field các giá trị chỉ định trường dữ liệu cần trả về. Không có danh sách mặc định nào trả về các trường trong phản hồi.

    Danh sách trường là một phương pháp thiết kế hiệu quả để đảm bảo rằng bạn sẽ không yêu cầu dữ liệu không cần thiết, giúp tránh thời gian xử lý không cần thiết và các khoản phí thanh toán.

    Chỉ định một hoặc nhiều trường sau:

    • Các trường sau đây kích hoạt SKU của Tìm kiếm văn bản (chỉ mã nhận dạng):

      Place.Field.ID, Place.Field.NAME
    • Các trường sau đây kích hoạt SKU Tìm kiếm văn bản (Cơ bản):

      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
    • Các trường sau đây kích hoạt SKU Tìm kiếm văn bản (Nâng cao):

      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
    • Các trường sau đây kích hoạt SKU của Tìm kiếm văn bản (Ưu tiên):

      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

    Để đặt tham số danh sách trường, hãy gọi phương thức setPlaceFields() khi tạo đối tượng SearchByTextRequest.

  • Truy vấn bằng văn bản

    Chuỗi văn bản cần tìm kiếm, ví dụ: "nhà hàng", "123 Main Street" hoặc "địa điểm tốt nhất để ghé thăm ở San Francisco". API trả về kết quả phù hợp dựa trên chuỗi này và sắp xếp kết quả dựa trên về mức độ liên quan mà họ cảm nhận được.

    Để đặt tham số truy vấn văn bản, hãy gọi phương thức setTextQuery() khi tạo đối tượng SearchByTextRequest.

Thông số tùy chọn

Sử dụng SearchByTextRequest để chỉ định các tham số không bắt buộc cho yêu cầu của bạn.

  • Loại được bao gồm

    Giới hạn kết quả ở các địa điểm phù hợp với loại đã chỉ định theo Bảng A. Bạn chỉ có thể chỉ định một loại. Ví dụ:

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

    Để đặt tham số loại được đưa vào, hãy gọi phương thức setIncludedType() khi tạo đối tượng SearchByTextRequest.

  • Xu hướng vị trí

    Chỉ định một vùng để tìm kiếm. Vị trí này có nghĩa là có thể trả về kết quả quanh vị trí chỉ định, bao gồm kết quả bên ngoài khu vực được chỉ định.

    Bạn có thể chỉ định hạn chế về vị trí hoặc sự thiên vị về vị trí, nhưng không phải cả hai. Hãy coi việc hạn chế vị trí là việc xác định khu vực nơi kết quả phải nằm trong đó và độ lệch vị trí chỉ định khu vực nơi kết quả phải ở gần nhưng có thể ở bên ngoài khu vực đó.

    Chỉ định khu vực dưới dạng Cửa sổ xem hình chữ nhật hoặc hình tròn.

    • Một đường tròn được xác định bởi tâm điểm và bán kính tính bằng mét. Bán kính phải nằm trong khoảng từ 0,0 đến 50000,0. Ví dụ:

      // 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();
      
    • Hình chữ nhật là một khung nhìn vĩ độ – kinh độ, được biểu thị dưới dạng hai theo đường chéo đối diện với điểm cao và điểm thấp. Điểm thấp đánh dấu hướng tây nam góc của hình chữ nhật, và điểm cao nhất đại diện cho hướng đông bắc góc của hình chữ nhật.

      Khung nhìn được xem là khu vực khép kín, nghĩa là khu vực này bao gồm ranh giới của nó. Giới hạn vĩ độ phải nằm trong khoảng từ -90 đến 90 độ và giới hạn kinh độ phải nằm trong khoảng từ -180 độ đến 180 độ, bao gồm cả hai giá trị sau:

      • Nếu low = high, khung nhìn bao gồm điểm đó.
      • Nếu low.longitude > high.longitude, phạm vi kinh độ bị đảo ngược (khung nhìn vượt qua 180 độ kinh độ).
      • Nếu low.longitude = -180 độ và high.longitude = 180 độ, khung nhìn bao gồm tất cả kinh độ.
      • Nếu low.longitude = 180 độ và high.longitude = -180 độ, phạm vi kinh độ là trống.
      • Nếu low.latitude > high.latitude, phạm vi vĩ độ trống.

      Phải điền cả giá trị thấp và cao và không được điền vào hộp được đại diện trống. Khung nhìn trống dẫn đến lỗi.

      Ví dụ: về khung nhìn hình chữ nhật, hãy xem Yêu cầu Tìm kiếm văn bản.

      Để đặt tham số độ lệch của vị trí, hãy gọi phương thức setLocationBias() khi tạo đối tượng SearchByTextRequest.

  • Hạn chế vị trí

    Chỉ định một vùng để tìm kiếm. Kết quả nằm ngoài khu vực được chỉ định không bị trả lại. Chỉ định khu vực dưới dạng một Khung nhìn hình chữ nhật. Xem nội dung mô tả về Thiên vị vị trí để biết thông tin về cách xác định Khung nhìn.

    Bạn có thể chỉ định hạn chế về vị trí hoặc sự thiên vị về vị trí, nhưng không phải cả hai. Hãy coi việc hạn chế vị trí là việc xác định khu vực nơi kết quả phải nằm trong đó và độ lệch vị trí chỉ định khu vực nơi kết quả phải ở gần nhưng có thể ở bên ngoài khu vực đó.

    Để đặt thông số hạn chế về vị trí, hãy gọi phương thức setLocationRestriction() khi tạo đối tượng SearchByTextRequest.

  • Số kết quả tối đa

    Chỉ định số lượng kết quả địa điểm tối đa cần trả về. Giá trị phải nằm trong khoảng 1 và 20 (mặc định).

    Để đặt thông số số lượng kết quả tối đa, hãy gọi phương thức setMaxResultCount() khi tạo đối tượng SearchByTextRequest.

  • Xếp hạng tối thiểu

    Chỉ cung cấp kết quả cho những người có điểm xếp hạng trung bình từ người dùng cao hơn hoặc bằng giới hạn này. Giá trị phải nằm trong khoảng từ 0 đến 5 (bao gồm) trong gia số 0,5. Ví dụ: bao gồm 0, 0.5, 1.0, ... , 5.0. Các giá trị là làm tròn lên đến 0,5 gần nhất. Ví dụ: giá trị 0, 6 loại bỏ tất cả kết quả có điểm xếp hạng dưới 1.0.

    Để đặt thông số xếp hạng tối thiểu, hãy gọi phương thức setMinRating() khi tạo đối tượng SearchByTextRequest.

  • Đang mở

    Nếu true, chỉ trả lại những địa điểm đang mở cửa kinh doanh tại thời điểm gửi truy vấn. Nếu là false, hãy trả lại tất cả doanh nghiệp bất kể trạng thái mở là gì. Những địa điểm không chỉ định giờ mở cửa trong cơ sở dữ liệu của Google Địa điểm được sẽ trả về nếu bạn đặt tham số này thành false.

    Để đặt tham số Open now, hãy gọi phương thức setOpenNow() khi tạo đối tượng SearchByTextRequest.

  • Các mức giá

    Theo mặc định, kết quả bao gồm những địa điểm cung cấp dịch vụ ở mọi mức giá. Để hạn chế kết quả để chỉ bao gồm những địa điểm ở mức giá cụ thể, bạn có thể chuyển danh sách trong các giá trị số nguyên tương ứng với các mức giá cho địa điểm bạn muốn trả về:

    • 1 – Địa điểm cung cấp các dịch vụ giá rẻ.
    • 2 – Địa điểm cung cấp các dịch vụ với giá phải chăng.
    • 3 – Địa điểm cung cấp các dịch vụ đắt tiền.
    • 4 - Địa điểm cung cấp các dịch vụ rất đắt tiền.

    Để đặt thông số các mức giá, hãy gọi phương thức setPriceLevels() khi tạo đối tượng SearchByTextRequest.

  • Tùy chọn xếp hạng

    Chỉ định cách xếp hạng kết quả trong phản hồi dựa trên loại truy vấn:

    • Đối với truy vấn theo danh mục, chẳng hạn như "Nhà hàng ở Thành phố New York", SearchByTextRequest.RankPreference.RELEVANCE (xếp hạng kết quả theo mức độ liên quan với cụm từ tìm kiếm) là chế độ mặc định. Bạn có thể đặt tùy chọn xếp hạng thành SearchByTextRequest.RankPreference.RELEVANCE hoặc SearchByTextRequest.RankPreference.DISTANCE (xếp hạng kết quả theo khoảng cách).
    • Đối với truy vấn không theo danh mục, chẳng hạn như "Mountain View, CA", bạn nên mà bạn không đặt thông số tùy chọn xếp hạng.

    Để đặt tham số lựa chọn ưu tiên về thứ hạng, hãy gọi phương thức setRankPreference() khi tạo đối tượng SearchByTextRequest.

  • Mã vùng

    Mã vùng dùng để định dạng phản hồi, được chỉ định làm mã CLDR gồm hai ký tự. Tham số này cũng có thể có hiệu ứng sai lệch trên kết quả tìm kiếm. Không có giá trị mặc định.

    Nếu tên quốc gia của trường địa chỉ trong phản hồi khớp với mã vùng, mã quốc gia bị bỏ khỏi địa chỉ.

    Hầu hết mã CLDR đều giống với mã ISO 3166-1, với một số ngoại lệ đáng chú ý. Ví dụ: ccTLD (miền cấp cao nhất theo mã quốc gia) của Vương quốc Anh là "uk" (.co.uk) trong khi mã ISO 3166-1 của trang web là "gb" (về mặt kỹ thuật cho pháp nhân "Vương quốc Anh và Bắc Ireland"). Tuỳ theo luật hiện hành, thông số này có thể ảnh hưởng đến kết quả.

    Để đặt tham số mã khu vực, hãy gọi phương thức setRegionCode() khi tạo đối tượng SearchByTextRequest.

  • Lọc loại nghiêm ngặt

    Được sử dụng với tham số loại bao gồm. Khi đặt thành true, chỉ những vị trí khớp với các loại đã chỉ định theo loại dữ liệu bao gồm được trả về. Khi là false, mặc định, câu trả lời có thể chứa địa điểm không khớp với các loại được chỉ định.

    Để đặt tham số lọc kiểu nghiêm ngặt, hãy gọi phương thức setStrictTypeFiltering() khi tạo đối tượng SearchByTextRequest.