ค้นหาข้อความ (ใหม่)

เลือกแพลตฟอร์ม: Android iOS JavaScript บริการเว็บ

การค้นหาข้อความ (ใหม่) จะแสดงข้อมูลเกี่ยวกับชุดสถานที่ตามสตริง ตัวอย่างเช่น "พิซซ่าในนิวยอร์ก" หรือ "ร้านรองเท้าใกล้ออตตาวา" หรือ "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 ช่อง

    หากต้องการตั้งค่าพารามิเตอร์รายการช่อง ให้เรียกเมธอด 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