การค้นหาข้อความจะแสดงข้อมูลเกี่ยวกับชุดสถานที่ตามสตริง เช่น "พิซซ่าในกรุงเทพฯ" หรือ "ร้านรองเท้าใกล้เมืองออตตาวา" หรือ "123 ถนนสุขุมวิท" บริการจะตอบกลับด้วยรายการสถานที่ที่ตรงกับสตริงข้อความและอคติเกี่ยวกับตำแหน่งที่ตั้งไว้
บริการนี้จะเป็นประโยชน์อย่างยิ่งสำหรับการทำการค้นหาที่อยู่ที่กำกวมในระบบอัตโนมัติ และองค์ประกอบที่ไม่มีที่อยู่ของสตริงอาจตรงกับธุรกิจและที่อยู่ ตัวอย่างของการค้นหาที่อยู่ที่ไม่ชัดเจนคือที่อยู่หรือคำขอที่มีรูปแบบไม่ถูกต้องซึ่งมีองค์ประกอบที่ไม่ได้ระบุ เช่น ชื่อธุรกิจ คำขออย่างเช่น 2 ตัวอย่างแรกอาจแสดงผลลัพธ์เป็น 0 เว้นแต่ว่ามีการตั้งค่าตำแหน่ง เช่น ภูมิภาค การจำกัดตำแหน่ง หรือความลำเอียงเกี่ยวกับสถานที่ตั้ง
"10 High Street, UK" หรือ "123 Main Street, US" | "ถนน" หลายแห่งในสหราชอาณาจักร; หลายตำแหน่ง "ถนนหลัก" ในสหรัฐอเมริกา การค้นหาไม่แสดงผลลัพธ์ที่ต้องการ เว้นแต่จะตั้งค่าการจำกัดตำแหน่งไว้ |
"ร้านอาหารสาขานิวยอร์ก" | มีร้าน "ChainRestaurant" หลายแห่งในนิวยอร์ก ไม่มีที่อยู่หรือแม้แต่ชื่อถนน |
"10 High Street, Escher UK" หรือ "123 Main Street, Pleasanton US" | "ถนน" เพียงแห่งเดียวในเมืองเอชเชอร์ของสหราชอาณาจักร และมีเพียง "ถนนหลัก" เพียงแห่งเดียวในเมืองพลีซานตันของรัฐแคลิฟอร์เนียในสหรัฐอเมริกา |
"UniqueRestaurantName นิวยอร์ก" | มีเพียงสถานประกอบการที่มีชื่อนี้ในนิวยอร์กเท่านั้น ไม่จำเป็นต้องมีที่อยู่เพื่อแยกความแตกต่าง |
"ร้านพิซซ่าในหัวหิน" | การค้นหานี้มีข้อจำกัดตำแหน่ง และ "ร้านพิซซ่า" เป็นประเภทสถานที่ที่กำหนดไว้เป็นอย่างดี โดยแสดงผลลัพธ์หลายรายการ |
+1 514-670-8700" | ข้อความค้นหานี้มีหมายเลขโทรศัพท์ โดยจะแสดงผลการค้นหาหลายรายการสำหรับสถานที่ที่เชื่อมโยงกับหมายเลขโทรศัพท์นั้น |
คำขอการค้นหาข้อความ
คำขอค้นหาข้อความจะอยู่ในแบบฟอร์ม:
// 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(); });
ในตัวอย่างนี้ คุณจะทำสิ่งต่อไปนี้ได้
ตั้งค่ารายการช่องให้รวมเฉพาะ
Place.Field.ID
และPlace.Field.NAME
ซึ่งหมายความว่าออบเจ็กต์Place
ในการตอบสนองที่แสดงให้เห็นว่าสถานที่ที่ตรงกันแต่ละแห่งมีเฉพาะ 2 ช่องนั้นใช้
SearchByTextRequest.Builder
เพื่อสร้างออบเจ็กต์SearchByTextRequest
ที่กำหนดการค้นหาตั้งค่าสตริงการค้นหาข้อความเป็น "อาหารมังสวิรัติรสเผ็ด"
ตั้งค่าจำนวนตำแหน่งผลการค้นหาสูงสุดเป็น 10 ค่าเริ่มต้นและสูงสุดคือ 20 รายการ
จำกัดพื้นที่ค้นหาให้อยู่ในรูปสี่เหลี่ยมผืนผ้าที่กำหนดตามพิกัดละติจูดและลองจิจูด ไม่มีผลลัพธ์ที่ตรงกันที่อยู่นอกพื้นที่นี้
เพิ่ม
OnSuccessListener
และรับสถานที่ที่ตรงกันจากออบเจ็กต์SearchByTextResponse
คำตอบของ Text Search
คลาส SearchByTextResponse
แสดงถึงการตอบกลับจากคำขอการค้นหา ออบเจ็กต์ SearchByTextResponse
ประกอบด้วยสิ่งต่อไปนี้
รายการวัตถุ
Place
ที่แสดงถึงสถานที่ที่ตรงกันทั้งหมด โดยมี 1 ออบเจ็กต์Place
ต่อสถานที่ที่ตรงกันออบเจ็กต์
Place
แต่ละรายการจะมีเฉพาะช่องที่กำหนดโดยรายการช่องที่ส่งผ่านในคำขอ
ตัวอย่างเช่น ในคำขอ คุณกำหนดรายการช่องเป็น
// Specify the list of fields to return. final List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);
รายการช่องนี้หมายความว่าออบเจ็กต์ Place
แต่ละรายการในการตอบสนองมีเฉพาะรหัสสถานที่และชื่อของสถานที่ที่ตรงกันแต่ละแห่ง จากนั้นจะใช้เมธอด Place.getId()
และ Place.getName()
เพื่อเข้าถึงช่องเหล่านี้ในออบเจ็กต์ Place
แต่ละรายการ
ดูตัวอย่างเพิ่มเติมเกี่ยวกับการเข้าถึงข้อมูลในออบเจ็กต์ Place
ได้ที่ช่องข้อมูลออบเจ็กต์การเข้าถึง Place
พารามิเตอร์ที่จำเป็น
-
รายการช่อง
ระบุฟิลด์ข้อมูลสถานที่ที่จะส่งคืน ส่งรายการค่า
Place.Field
ที่ระบุช่องข้อมูลที่ต้องการแสดงผล ไม่มีรายการเริ่มต้นของฟิลด์ที่แสดงผลในคำตอบรายการช่องเป็นวิธีการออกแบบที่ดีที่จะช่วยให้คุณไม่ขอข้อมูลที่ไม่จำเป็น ซึ่งจะช่วยหลีกเลี่ยงเวลาในการประมวลผลและการเรียกเก็บเงินที่ไม่จำเป็น
ระบุช่องต่อไปนี้อย่างน้อย 1 ช่อง
ช่องต่อไปนี้จะเรียก SKU การค้นหาข้อความ (รหัสเท่านั้น)
Place.Field.ID
,Place.Field.NAME
ช่องต่อไปนี้จะเรียก SKU การค้นหาข้อความ (พื้นฐาน)
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
ช่องต่อไปนี้จะเรียก SKU การค้นหาข้อความ (ขั้นสูง)
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
ช่องต่อไปนี้จะเรียก SKU การค้นหาข้อความ (ที่ต้องการ)
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
-
ข้อความค้นหา
สตริงข้อความที่จะค้นหา เช่น "ร้านอาหาร" "123 ถนนสุขุมวิท" หรือ "สถานที่ที่น่าไปที่สุดในกรุงเทพ" API จะแสดงผลการจับคู่ตัวเลือกที่ตรงกันตามสตริงนี้และเรียงลำดับผลลัพธ์ตามความเกี่ยวข้องที่รับรู้ได้
พารามิเตอร์ที่ไม่บังคับ
ตั้งค่าพารามิเตอร์เหล่านี้โดยใช้เมธอด SearchByTextRequest.Builder
ตัวอย่างเช่น หากต้องการตั้งค่าจำนวนผลลัพธ์สูงสุด ให้โทรหา SearchByTextRequest.Builder.setMaxResultCount()
ประเภทที่รวมไว้
จำกัดผลลัพธ์ให้แสดงแต่ตำแหน่งที่ตรงกับประเภทที่ระบุซึ่งกำหนดโดยตาราง ก ระบุได้เพียงประเภทเดียว เช่น
setIncludedType("bar")
setIncludedType("pharmacy")
การให้น้ำหนักพิเศษกับสถานที่ตั้ง
ระบุพื้นที่ที่จะค้นหา ตำแหน่งนี้ทำหน้าที่เป็นการให้น้ำหนักพิเศษซึ่งจะทำให้แสดงผลลัพธ์ที่อยู่รอบๆ ตำแหน่งที่ระบุได้ รวมถึงผลลัพธ์ที่อยู่นอกพื้นที่ที่ระบุ
คุณจะระบุข้อจำกัดเกี่ยวกับตำแหน่งหรือความลำเอียงของตำแหน่งได้ แต่ไม่ใช่ทั้ง 2 อย่าง ให้คิดว่าการจำกัดตำแหน่งเป็นการระบุภูมิภาคที่ผลลัพธ์ต้องอยู่ภายใน และการให้น้ำหนักตำแหน่งเป็นการระบุภูมิภาคที่ผลลัพธ์ต้องอยู่ใกล้ แต่สามารถอยู่นอกพื้นที่ได้
ระบุภูมิภาคเป็นวิวพอร์ตสี่เหลี่ยมผืนผ้าหรือเป็นวงกลม
วงกลมจะกำหนดโดยจุดศูนย์กลางและรัศมีเป็นเมตร รัศมีต้องอยู่ระหว่าง 0.0 ถึง 50, 000.0 รัศมีเริ่มต้นคือ 0.0 เช่น
// 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();
สี่เหลี่ยมผืนผ้าคือวิวพอร์ตละติจูด-ลองจิจูดที่แสดงเป็นเส้นทแยงมุม 2 จุดตรงข้ามจุดต่ำสุดและสูง จุดต่ำทำเครื่องหมายมุมตะวันตกเฉียงใต้ของรูปสี่เหลี่ยมผืนผ้า และจุดสูงแสดงมุมตะวันออกเฉียงเหนือของรูปสี่เหลี่ยมผืนผ้า
วิวพอร์ตถือเป็นพื้นที่แบบปิด ซึ่งหมายความว่ามีขอบเขตของวิวพอร์ตรวมอยู่ด้วย ขอบเขตละติจูดต้องอยู่ในช่วง -90 ถึง 90 องศา และขอบเขตลองจิจูดต้องอยู่ในช่วง -180 ถึง 180 องศา
- หาก
low
=high
วิวพอร์ตจะประกอบด้วยจุดเดียวนั้น - หาก
low.longitude
>high.longitude
ช่วงลองจิจูดจะกลับกัน (วิวพอร์ตข้ามเส้นลองจิจูด 180 องศา) - หาก
low.longitude
= -180 องศาและhigh.longitude
= 180 องศา วิวพอร์ตจะรวมลองจิจูดทั้งหมด - หาก
low.longitude
= 180 องศาและhigh.longitude
= -180 องศา ช่วงลองจิจูดจะว่างเปล่า - หาก
low.latitude
>high.latitude
ช่วงละติจูดจะว่างเปล่า
ต้องระบุทั้งค่าต่ำและสูง และช่องที่แสดงต้องไม่ว่างเปล่า วิวพอร์ตที่ว่างเปล่าจะทำให้เกิดข้อผิดพลาด
ตัวอย่างเช่น วิวพอร์ตเป็นสี่เหลี่ยมผืนผ้า โปรดดูคำขอค้นหาข้อความ
- หาก
การจำกัดสถานที่
ระบุพื้นที่ที่จะค้นหา ระบบจะไม่แสดงผลลัพธ์นอกพื้นที่ที่ระบุ ระบุภูมิภาคเป็นวิวพอร์ตสี่เหลี่ยมผืนผ้า ดูคำอธิบายของการให้น้ำหนักตำแหน่งสำหรับข้อมูลเกี่ยวกับการกำหนดวิวพอร์ต
คุณจะระบุข้อจำกัดเกี่ยวกับตำแหน่งหรือความลำเอียงของตำแหน่งได้ แต่ไม่ใช่ทั้ง 2 อย่าง ให้คิดว่าการจำกัดตำแหน่งเป็นการระบุภูมิภาคที่ผลลัพธ์ต้องอยู่ภายใน และการให้น้ำหนักตำแหน่งเป็นการระบุภูมิภาคที่ผลลัพธ์ต้องอยู่ใกล้ แต่สามารถอยู่นอกพื้นที่ได้
-
จำนวนผลลัพธ์สูงสุด
ระบุจำนวนผลการค้นหาสถานที่สูงสุดที่จะแสดง ต้องอยู่ระหว่าง 1 ถึง 20 (ค่าเริ่มต้น)
คะแนนขั้นต่ำ
จำกัดผลลัพธ์ไว้เฉพาะผลลัพธ์ที่มีการให้คะแนนของผู้ใช้โดยเฉลี่ยมากกว่าหรือเท่ากับขีดจำกัดนี้ ค่าต้องอยู่ระหว่าง 0.0 ถึง 5.0 (รวมเลขตัวแรกและตัวสุดท้าย) โดยเพิ่มได้ทีละ 0.5 เช่น 0, 0.5, 1.0, ... , 5.0 ระบบจะปัดเศษค่าขึ้นเป็น 0.5 ที่ใกล้เคียงที่สุด เช่น ค่า 0.6 จะลบผลลัพธ์ทั้งหมดที่มีคะแนนต่ำกว่า 1.0
เปิดอยู่
หากเป็น
true
ให้แสดงผลเฉพาะสถานที่ที่เปิดให้บริการอยู่ ณ เวลาที่มีการส่งการค้นหา หากเป็นfalse
ให้แสดงผลธุรกิจทั้งหมดโดยไม่คำนึงถึงสถานะเปิดทำการ ระบบจะแสดงสถานที่ที่ไม่ได้ระบุเวลาทำการในฐานข้อมูล Google Places ไว้ หากคุณตั้งค่าพารามิเตอร์นี้เป็นfalse
-
ระดับราคา
จำกัดการค้นหาไว้เฉพาะสถานที่ที่มีการทำเครื่องหมายที่ระดับราคาที่กำหนด ค่าเริ่มต้นคือเลือกระดับราคาทุกระดับ
ระบุรายการค่าจำนวนเต็มต่อไปนี้อย่างน้อย 1 ค่า
- 1 -
PRICE_LEVEL_INEXPENSIVE
รายการ - 2 -
PRICE_LEVEL_MODERATE
แถว - 3 -
PRICE_LEVEL_EXPENSIVE
คน - 4 -
PRICE_LEVEL_VERY_EXPENSIVE
- 1 -
อันดับที่ต้องการ
ระบุวิธีจัดอันดับผลการค้นหาในการตอบกลับ API จะใช้
RELEVANCE
โดยค่าเริ่มต้น (หากมี) เช่น สำหรับการค้นหาอย่าง "ร้านอาหารในนิวยอร์กซิตี้" จะใช้RELEVANCE
เป็นค่าเริ่มต้น สำหรับการค้นหาทางภูมิศาสตร์ เช่น "Mountain View, CA" หรือการค้นหาประเภทอื่นๆ ระบบจะไม่ใช้ค่าเริ่มต้น และผลลัพธ์จะปรากฏตามลำดับที่แบ็กเอนด์ส่งกลับมาค่าต่างๆ ประกอบด้วย
SearchByTextRequest.RankPreference.DISTANCE
: จัดอันดับผลการค้นหาตามระยะทางSearchByTextRequest.RankPreference.RELEVANCE
: จัดอันดับผลการค้นหาตามความเกี่ยวข้อง
รหัสภูมิภาค
รหัสภูมิภาคที่ใช้ในการจัดรูปแบบการตอบกลับ ซึ่งระบุเป็นค่า รหัส CLDR แบบ 2 อักขระ พารามิเตอร์นี้อาจทำให้เกิดการให้น้ำหนักพิเศษในผลการค้นหาได้ด้วย ไม่มีค่าเริ่มต้น
หากชื่อประเทศของช่องที่อยู่ในคำตอบตรงกับรหัสภูมิภาค รหัสประเทศจะไม่แสดงในที่อยู่
รหัส CLDR ส่วนใหญ่เหมือนกับรหัส ISO 3166-1 แต่มีข้อยกเว้นบางประการที่สำคัญ เช่น ccTLD ของสหราชอาณาจักรคือ "uk" (.co.uk) ส่วนรหัส ISO 3166-1 คือ "gb" (ทางเทคนิคสำหรับเอนทิตีของ "สหราชอาณาจักรบริเตนใหญ่และไอร์แลนด์เหนือ") พารามิเตอร์นี้อาจส่งผลต่อผลลัพธ์ตามกฎหมายที่เกี่ยวข้อง
การกรองประเภทที่เข้มงวด
ใช้กับพารามิเตอร์ประเภทการรวม เมื่อตั้งค่าเป็น
true
ระบบจะแสดงผลเฉพาะตำแหน่งที่ตรงกับประเภทที่ระบุโดยประเภทการรวม เมื่อกำหนดเป็นfalse
โดยค่าเริ่มต้น การตอบกลับอาจมีตำแหน่งที่ไม่ตรงกับประเภทที่ระบุ