การค้นหาข้อความ (ใหม่) จะแสดงข้อมูลเกี่ยวกับชุดสถานที่ตามสตริง ตัวอย่างเช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้ออตตาวา" หรือ "123 ถนนสุขุมวิท" บริการจะตอบกลับด้วยรายการสถานที่ที่ตรงกับสตริงข้อความและความเอนเอียงของตำแหน่งที่ตั้งค่าไว้
บริการนี้มีประโยชน์อย่างยิ่งสำหรับการสืบค้นข้อมูลที่อยู่ที่คลุมเครือในระบบอัตโนมัติ และองค์ประกอบที่ไม่มีที่อยู่ของสตริงอาจตรงกับทั้งธุรกิจและที่อยู่ ตัวอย่างของการค้นหาที่อยู่ที่ไม่ชัดเจนคือที่อยู่ที่มีรูปแบบไม่ดีหรือคำขอที่มีองค์ประกอบที่ไม่มีที่อยู่ เช่น ชื่อธุรกิจ คำขออย่างเช่น 2 ตัวอย่างแรกอาจไม่แสดงผลลัพธ์เลย เว้นแต่จะมีการตั้งค่าตำแหน่ง เช่น ภูมิภาค การจำกัดตำแหน่ง หรือการให้น้ำหนักพิเศษกับตำแหน่งไว้
การค้นหาข้อความ (ใหม่) คล้ายกับการค้นหาใกล้เคียง (ใหม่) ความแตกต่างหลักระหว่างการค้นหาทั้งสองแบบคือการค้นหาข้อความ (ใหม่) ช่วยให้คุณระบุสตริงการค้นหาที่กำหนดเองได้ ในขณะที่การค้นหาใกล้เคียง (ใหม่) ต้องการพื้นที่เฉพาะที่จะค้นหา
"10 High Street, UK" หรือ "123 Main Street, US" | "ถนน" หลายสายในสหราชอาณาจักร "ถนนหลัก" หลายสายในสหรัฐอเมริกา การค้นหาไม่แสดงผลการค้นหาที่ต้องการ เว้นแต่จะตั้งค่าการจํากัดตําแหน่งไว้ |
"แฟรนไชส์ร้านอาหารนิวยอร์ก" | ร้าน "ChainRestaurant" หลายแห่งในนิวยอร์ก โดยไม่มีที่อยู่หรือแม้กระทั่งชื่อถนน |
"10 High Street, Escher UK" หรือ "123 Main Street, Pleasanton US" | "High Street" เพียงแห่งเดียวในเมือง Escher ของสหราชอาณาจักร แต่มีเพียง "Main Street" เดียวในเมือง Pleasanton CA ของสหรัฐอเมริกา |
"UniqueRestaurantName New York" | มีสถานประกอบการเพียงแห่งเดียวที่ใช้ชื่อนี้ในนิวยอร์ก โดยไม่ต้องมีที่อยู่แยก |
"ร้านพิซซ่าในหัวหิน" | คำค้นหานี้มีการจำกัดตำแหน่ง และ "ร้านพิซซ่า" เป็น ประเภทสถานที่ที่กำหนดไว้อย่างชัดเจน แสดงผลการค้นหาหลายรายการ |
"+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 และ ค่าสูงสุดคือ 20
จำกัดพื้นที่ที่ค้นหาเป็นสี่เหลี่ยมผืนผ้าซึ่งกำหนดด้วยพิกัดละติจูดและลองจิจูด ระบบจะไม่แสดงผลรายการที่ตรงกันนอกพื้นที่นี้
เพิ่ม
OnSuccessListener
และรับสถานที่ที่ตรงกันจากออบเจ็กต์SearchByTextResponse
การตอบกลับการค้นหาข้อความ
คลาส 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
พารามิเตอร์ที่จำเป็น
พารามิเตอร์ที่จำเป็นสำหรับ SearchByTextRequest
มีดังนี้
-
รายการช่อง
ระบุฟิลด์ข้อมูลสถานที่ที่จะแสดง ส่งรายการค่า
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
หากต้องการตั้งค่าพารามิเตอร์รายการช่อง ให้เรียกเมธอด
setPlaceFields()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
-
การค้นหาข้อความ
สตริงข้อความที่จะค้นหา เช่น "ร้านอาหาร" "123 ถนนสุขุมวิท" หรือ "สถานที่ที่น่าไปที่สุดในเชียงใหม่" API จะแสดงผลการจับคู่คำที่รอการพิจารณาตามสตริงนี้และเรียงลำดับผลลัพธ์ตามความเกี่ยวข้องที่รับรู้
หากต้องการตั้งค่าพารามิเตอร์การค้นหาข้อความ ให้เรียกเมธอด
setTextQuery()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
พารามิเตอร์ที่ไม่บังคับ
ใช้ออบเจ็กต์ SearchByTextRequest
เพื่อระบุพารามิเตอร์ที่ไม่บังคับสำหรับคำขอ
ประเภทที่รวม
จำกัดผลการค้นหาเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุซึ่งกำหนดโดยตาราง A ระบุได้เพียงประเภทเดียวเท่านั้น เช่น
setIncludedType("bar")
setIncludedType("pharmacy")
หากต้องการตั้งค่าพารามิเตอร์ประเภทที่รวม ให้เรียกเมธอด
setIncludedType()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
ความลำเอียงของตำแหน่ง
ระบุพื้นที่ที่จะค้นหา ตำแหน่งนี้ถือเป็นการให้น้ำหนักพิเศษ ซึ่งหมายความว่าระบบแสดงผลการค้นหารอบๆ ตำแหน่งที่ระบุได้ รวมถึงผลการค้นหานอกพื้นที่ที่ระบุ
คุณสามารถระบุข้อจำกัดเกี่ยวกับตำแหน่งหรือการให้น้ำหนักพิเศษกับสถานที่ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ ให้คิดว่าการจำกัดตำแหน่งเป็นการระบุภูมิภาคที่ผลการค้นหาจะต้องอยู่ภายใน และการให้น้ำหนักตำแหน่งเป็นการระบุภูมิภาคที่ผลการค้นหาจะต้องอยู่ใกล้เคียง แต่อาจอยู่นอกพื้นที่ดังกล่าว
ระบุพื้นที่เป็นวิวพอร์ตสี่เหลี่ยมผืนผ้าหรือวงกลม
วงกลมกำหนดด้วยจุดศูนย์กลางและรัศมีเป็นเมตร รัศมีต้องอยู่ระหว่าง 0.0 ถึง 50000.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 องศา (รวม - 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
ช่วงละติจูดจะว่างเปล่า
ต้องป้อนข้อมูลทั้ง "ต่ำ" และ "สูง" และช่องที่แสดง จะเว้นว่างไม่ได้ วิวพอร์ตที่ว่างเปล่าจะทำให้เกิดข้อผิดพลาด
ตัวอย่างเช่น วิวพอร์ตสี่เหลี่ยมผืนผ้าจะเห็นคำขอค้นหาข้อความ
หากต้องการตั้งค่าพารามิเตอร์ความเอนเอียงของตำแหน่ง ให้เรียกเมธอด
setLocationBias()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
- หาก
การจำกัดตำแหน่ง
ระบุพื้นที่ที่จะค้นหา ไม่มีการแสดงผลลัพธ์นอกพื้นที่ที่ระบุ ระบุพื้นที่เป็นวิวพอร์ตสี่เหลี่ยมผืนผ้า ดูข้อมูลเกี่ยวกับการกำหนดวิวพอร์ตได้ในคำอธิบายของความลำเอียงของสถานที่
คุณสามารถระบุข้อจำกัดเกี่ยวกับตำแหน่งหรือการให้น้ำหนักพิเศษกับสถานที่ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ ให้คิดว่าการจำกัดตำแหน่งเป็นการระบุภูมิภาคที่ผลการค้นหาจะต้องอยู่ภายใน และการให้น้ำหนักตำแหน่งเป็นการระบุภูมิภาคที่ผลการค้นหาต้องอยู่ใกล้เคียงแต่อยู่นอกพื้นที่ได้
หากต้องการตั้งค่าพารามิเตอร์การจำกัดตำแหน่ง ให้เรียกเมธอด
setLocationRestriction()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
-
จำนวนผลลัพธ์สูงสุด
ระบุจำนวนสูงสุดของผลลัพธ์สถานที่ที่จะแสดง ต้องอยู่ระหว่าง 1 ถึง 20 (ค่าเริ่มต้น)
หากต้องการตั้งค่าพารามิเตอร์จำนวนผลลัพธ์สูงสุด ให้เรียกเมธอด
setMaxResultCount()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
คะแนนขั้นต่ำ
จำกัดผลการค้นหาให้แสดงเฉพาะผลลัพธ์ของผู้ใช้ที่มีคะแนนเฉลี่ยมากกว่าหรือเท่ากับขีดจำกัดนี้ ค่าต้องอยู่ระหว่าง 0.0 ถึง 5.0 (รวม) โดยเพิ่มขึ้นทีละ 0.5 เช่น 0, 0.5, 1.0, ... , 5.0 ระบบจะปัดเศษค่าขึ้นให้เป็นค่า 0.5 ที่ใกล้เคียงที่สุด เช่น ค่า 0.6 จะลบผลลัพธ์ทั้งหมดที่มีคะแนนต่ำกว่า 1.0
หากต้องการตั้งค่าพารามิเตอร์การให้คะแนนขั้นต่ำ ให้เรียกเมธอด
setMinRating()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
เปิดอยู่
หากเป็น
true
ให้แสดงผลเฉพาะสถานที่ที่เปิดให้บริการเท่านั้นในขณะที่มีการส่งคำค้นหา หากเป็นfalse
ให้แสดงผลธุรกิจทั้งหมดโดยไม่คำนึงถึงสถานะเปิด ระบบจะแสดงผลสถานที่ที่ไม่ระบุเวลาทำการในฐานข้อมูล Google Places หากคุณตั้งค่าพารามิเตอร์นี้เป็นfalse
หากต้องการตั้งค่าพารามิเตอร์ Open Now ให้เรียกเมธอด
setOpenNow()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
-
ระดับราคา
โดยค่าเริ่มต้น ผลการค้นหาจะรวมสถานที่ที่ให้บริการทุกระดับราคา หากต้องการจำกัดผลการค้นหาให้รวมสถานที่ในระดับราคาที่เจาะจงเท่านั้น คุณสามารถส่งรายการค่าจำนวนเต็มที่สอดคล้องกับระดับราคาสำหรับสถานที่ที่คุณต้องการแสดงผลได้
1
- สถานที่ให้บริการที่ไม่แพง2
- สถานที่ให้บริการในราคาปานกลาง3
- สถานที่ให้บริการที่มีค่าใช้จ่ายสูง4
- สถานที่ให้บริการที่มีราคาแพงมาก
หากต้องการตั้งค่าพารามิเตอร์ระดับราคา ให้เรียกเมธอด
setPriceLevels()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
อันดับที่ต้องการ
ระบุวิธีจัดอันดับผลการค้นหาในการตอบกลับตามประเภทของคำค้นหา ดังนี้
- สําหรับคําค้นหาตามหมวดหมู่ เช่น "ร้านอาหารในเชียงใหม่"
SearchByTextRequest.RankPreference.RELEVANCE
(จัดอันดับผลการค้นหาตามความเกี่ยวข้องของการค้นหา) จะเป็นค่าเริ่มต้น คุณตั้งค่ากำหนดอันดับเป็นSearchByTextRequest.RankPreference.RELEVANCE
หรือSearchByTextRequest.RankPreference.DISTANCE
(จัดอันดับผลลัพธ์ตามระยะทาง) ได้ - สำหรับการค้นหาที่ไม่ใช่หมวดหมู่ เช่น "Mountain View, CA" เราขอแนะนำให้คุณเว้นพารามิเตอร์ค่ากำหนดอันดับไว้
หากต้องการตั้งค่าพารามิเตอร์ค่ากำหนดอันดับ ให้เรียกเมธอด
setRankPreference()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
- สําหรับคําค้นหาตามหมวดหมู่ เช่น "ร้านอาหารในเชียงใหม่"
รหัสภูมิภาค
รหัสภูมิภาคที่ใช้ในการจัดรูปแบบการตอบกลับ ซึ่งระบุเป็นค่า รหัส CLDR แบบ 2 อักขระ พารามิเตอร์นี้อาจทำให้เกิดการให้น้ำหนักพิเศษกับผลการค้นหาได้เช่นกัน ไม่มีค่าเริ่มต้น
หากชื่อประเทศของฟิลด์ที่อยู่ในการตอบกลับตรงกับรหัสภูมิภาค รหัสประเทศจะไม่แสดงในที่อยู่
รหัส CLDR ส่วนใหญ่จะเหมือนกับรหัส ISO 3166-1 โดยมีข้อยกเว้นที่สำคัญบางประการ เช่น ccTLD ของสหราชอาณาจักรคือ "uk" (.co.uk) ขณะที่รหัส ISO 3166-1 คือ "gb" (ทางเทคนิคสำหรับเอนทิตีของ "สหราชอาณาจักรบริเตนใหญ่และไอร์แลนด์เหนือ") พารามิเตอร์อาจส่งผลต่อผลลัพธ์ตามกฎหมายที่เกี่ยวข้อง
หากต้องการตั้งค่าพารามิเตอร์รหัสภูมิภาค ให้เรียกเมธอด
setRegionCode()
เมื่อสร้างออบเจ็กต์SearchByTextRequest
การกรองประเภทที่เข้มงวด
ใช้กับพารามิเตอร์ประเภทรวม เมื่อตั้งค่าเป็น
true
ระบบจะแสดงเฉพาะสถานที่ที่ตรงกับประเภทที่ระบุตามประเภทการรวม เมื่อเป็นfalse
คำตอบอาจมีตำแหน่งที่ไม่ตรงกับประเภทที่ระบุเมื่อกำหนดค่าเริ่มต้นหากต้องการตั้งค่าพารามิเตอร์การกรองประเภทแบบเข้มงวด ให้เรียกเมธอด
setStrictTypeFiltering()
เมื่อสร้างออบเจ็กต์SearchByTextRequest