การค้นหาข้อความ

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

  • ข้อความค้นหา

    สตริงข้อความที่จะค้นหา เช่น "ร้านอาหาร" "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
  • อันดับที่ต้องการ

    ระบุวิธีจัดอันดับผลการค้นหาในการตอบกลับ 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 โดยค่าเริ่มต้น การตอบกลับอาจมีตำแหน่งที่ไม่ตรงกับประเภทที่ระบุ