จัดโครงสร้างสคีมาเพื่อการตีความคําค้นหาที่ดีที่สุด

ฟีเจอร์การตีความคำค้นหาของ Cloud Search จะตีความ ตัวดำเนินการและตัวกรองในคำค้นหาของผู้ใช้โดยอัตโนมัติ แล้วแปลงองค์ประกอบเหล่านั้นเป็นคำค้นหาที่มีโครงสร้างซึ่งอิงตามตัวดำเนินการ การตีความคำค้นหาจะใช้นิพจน์ที่กำหนดไว้ในสคีมาพร้อมกับเอกสารที่จัดทำดัชนีเพื่ออนุมานความหมายของคำค้นหาของผู้ใช้ ฟีเจอร์นี้ช่วยให้ผู้ใช้ค้นหาด้วยคีย์เวิร์ดน้อยที่สุด แต่ยังคงได้รับผลลัพธ์ที่แม่นยำ

ผลลัพธ์จริงที่แสดงต่อผู้ใช้จะขึ้นอยู่กับความมั่นใจ ในการตีความคำค้นหา ความมั่นใจขึ้นอยู่กับปัจจัยหลายประการ รวมถึงตำแหน่งที่สตริงการค้นหาปรากฏในเอกสารที่จัดทำดัชนี สตริง เช่น ชื่อนักแสดง "ทอม แฮงค์ส" ที่ปรากฏอย่างสม่ำเสมอในฟิลด์สคีมาที่ชื่อ actors จะทำให้มีความเชื่อมั่นสูงขึ้น สตริงเดียวกัน ("Tom Hanks") ที่ปรากฏภายในย่อหน้าแทนที่จะเป็นฟิลด์สคีมาอาจส่งผลให้ความเชื่อมั่นลดลง ในกรณีที่มีความมั่นใจสูง ระบบจะแสดงเฉพาะผลลัพธ์ จากการตีความคำค้นหาต่อผู้ใช้ ในกรณีที่มีความเชื่อมั่นต่ำกว่า ระบบจะรวมผลลัพธ์จากการตีความคำค้นหากับผลการค้นหาคีย์เวิร์ดปกติ

ตัวอย่างการตีความคำค้นหา

สมมติว่าคุณมีแหล่งข้อมูล เช่น ฐานข้อมูลที่มีข้อมูลเกี่ยวกับภาพยนตร์ รูปที่ 1 แสดงตัวอย่างคำค้นหาและการตีความที่ได้

ภาพรวมของการตีความคำค้นหา
รูปที่ 1 การตีความคำค้นหา

เมื่อพิจารณาคำค้นหาตัวอย่างนี้ การตีความคำค้นหา จะดำเนินการต่อไปนี้

  • แยกวิเคราะห์สคีมาและพิจารณาว่าออบเจ็กต์ระดับบนสุดในแหล่งข้อมูล จัดอยู่ในประเภทobjecttype:movies ตอนนี้การตีความคำค้นหาทราบแล้วว่า "ภาพยนตร์" ในคำค้นหาเป็นประเภทออบเจ็กต์

  • สแกนเอกสารในแหล่งข้อมูลร่วมกับสคีมาเพื่อ ระบุตำแหน่งที่สตริง "action" ปรากฏ หากสตริงส่วนใหญ่ปรากฏในฟิลด์แหล่งข้อมูล "ประเภท" ที่เฉพาะเจาะจง การตีความคำค้นหาจะมีความมั่นใจว่า "แอ็กชัน" เป็นค่าพร็อพเพอร์ตี้สำหรับพร็อพเพอร์ตี้ "ประเภท" ตามที่กำหนดไว้ในสคีมา หากสตริงส่วนใหญ่ปรากฏในบริบทของ ย่อหน้าเนื้อหา ระดับความเชื่อมั่นของการตีความคำค้นหาจะลดลง

การตีความการค้นหาที่ได้คือ

  actor:tom hanks genre:action objecttype:movies

ระบบจะเปิดใช้การตีความคำค้นหาโดยอัตโนมัติสำหรับลูกค้า Cloud Search ทุกราย โดยไม่ต้องดำเนินการใดๆ เพิ่มเติม อย่างไรก็ตาม เพื่อให้ตีความคำค้นหาได้ดีที่สุด คุณควร จัดโครงสร้างสคีมาตามวิธีการในเอกสารนี้

จัดโครงสร้างสคีมาเพื่อรองรับการตีความคำค้นหา

คุณควรจัดโครงสร้างสคีมาเพื่อให้ ได้รับประโยชน์จากการตีความคําค้นหา

เปิดใช้การตีความชื่อที่แสดง

การตีความคำค้นหาของ Cloud Search ใช้ objectDefinitions และ propertyDefinitions ในสคีมาเพื่อตีความคำค้นหาของผู้ใช้และปรับแต่งผลลัพธ์ คุณควรสร้างชื่อที่แสดงที่ใช้งานง่ายโดยใช้ displayLabel สำหรับชื่อพร็อพเพอร์ตี้ objectDisplayLabel สำหรับชื่อออบเจ็กต์ และ operatorName สำหรับตัวดำเนินการ เพื่อให้ได้รับประโยชน์สูงสุดจากองค์ประกอบสคีมาเหล่านี้

สคีมาต่อไปนี้แสดงชื่อที่แสดงที่ใช้งานง่ายสำหรับออบเจ็กต์ภาพยนตร์

{
  "objectDefinitions": [
    {
      "name": "movie",
        "options": {
          "displayOptions": {
          "objectDisplayLabel": "Films"
        }
        ...
      },
      "propertyDefinitions": [
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": {
            "operatorName": "genre"
          }
        },
        "displayOptions": {
          "displayLabel": "Category"
        }
      },
      ...
      ]
    }
  ]
}

ในตัวอย่างก่อนหน้า

  • คำจำกัดความของออบเจ็กต์ภาพยนตร์มี objectDisplayLabel "ภาพยนตร์"

  • พร็อพเพอร์ตี้ประเภทมีoperatorName "ประเภท" displayLabelและ "หมวดหมู่" displayLabel

ชื่อที่แสดงเหล่านี้ช่วยให้ Cloud Search ตีความการค้นหาต่อไปนี้ได้

  • "ภาพยนตร์แอ็กชัน" "ภาพยนตร์ประเภทแอ็กชัน" หรือ "ภาพยนตร์ประเภทแอ็กชัน" จะตีความว่าgenre:action object:movies
  • ระบบจะตีความ "ภาพยนตร์ที่มีประเภทแอ็กชันหรือระทึกขวัญ" เป็น objecttype:movies genre:(action OR thriller)
  • "ภาพยนตร์แอ็กชัน" หรือ "ภาพยนตร์แอ็กชัน" จะตีความเป็น genre:action objecttype:movies
  • ระบบจะตีความ "ภาพยนตร์หมวดหมู่ตลก" เป็น genre:comedy objecttype:movies

เปิดใช้การตีความวันที่ ตัวเลข และการจัดเรียง

คุณควรกำหนด lessThanOperatorName และ greaterThanOperatorName ที่ระบุไว้ใน IntegerOperatorOptions สำหรับพร็อพเพอร์ตี้วันที่และตัวเลขทั้งหมด การตั้งค่าเหล่านี้ช่วยให้ตีความวันที่และ ตัวเลขได้โดยอัตโนมัติ นอกจากนี้ หากต้องการเปิดใช้การตีความการจัดเรียง ให้ตั้งค่าตัวเลือก isSortable สำหรับพร็อพเพอร์ตี้วันที่และตัวเลข สคีมาต่อไปนี้ แสดงวิธีเปิดใช้ตัวเลือกเหล่านี้

{
  "objectDefinitions": [
    {
      "options": {
        "displayOptions": {
          "objectDisplayLabel": "Films"
        }
      },
      "propertyDefinitions": [
        {
          "name": "runtime",
          "isReturnable": true,
          "isSortable": true,
          "integerPropertyOptions": {
            "orderedRanking": "DESCENDING",
            "minimumValue": {
              "value": 10
            },
            "maximumValue": {
              "value": 500
            },
            "operatorOptions": {
              "operatorName": "runtime",
              "lessThanOperatorName": "runtimelessthan",
              "greaterThanOperatorName": "runtimegreaterthan"
            }
          },
          "displayOptions": {
            "displayLabel": "Length"
          }
        },
        {
          "name": "releasedate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "releasedate",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        }
      ]
    }
  ]
}

ในตัวอย่างก่อนหน้า

  • พร็อพเพอร์ตี้ตัวเลข runtime หมายถึงความยาวของภาพยนตร์ ระบบได้ตั้งค่า runtimelessthan และ runtimegreaterthan สำหรับพร็อพเพอร์ตี้นี้แล้ว
  • พร็อพเพอร์ตี้วันที่ releaseDate หมายถึงวันที่ภาพยนตร์เข้าฉายในโรงภาพยนตร์ ระบบได้ตั้งค่า releasedbefore และ releasedafter สำหรับพร็อพเพอร์ตี้นี้แล้ว

การตั้งค่าเหล่านี้ช่วยให้ Cloud Search ตีความคำค้นหาต่อไปนี้ได้

  • หากปีปัจจุบันคือปี 2019 ระบบจะตีความคำว่า "ภาพยนตร์ที่ออกฉายในปีนี้" เป็น objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • หากสัปดาห์เป็นสัปดาห์ที่ 3 ของเดือนมีนาคม ระบบจะตีความ "ภาพยนตร์ที่เข้าฉายเมื่อสัปดาห์ที่แล้ว" เป็น objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
  • "ภาพยนตร์ที่มีระยะเวลาในการรับชมน้อยกว่า 90 นาที" จะตีความเป็น objjecttype: movies runtimelessthan:90
  • หากปีปัจจุบันคือปี 2019 ระบบจะตีความ "ภาพยนตร์ที่ออกฉายในปีนี้และมีความยาวมากกว่า 120 นาที" เป็น releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120
  • "จัดเรียงภาพยนตร์ตามวันที่วางจำหน่าย" จะกรอง "objecttype: movies" และ ผลลัพธ์ที่แสดงจะจัดเรียงตามวันที่วางจำหน่ายโดยมีลำดับการจัดเรียงเริ่มต้น เป็นจากเก่าสุดไปใหม่สุด

เปิดใช้การตีความโดยโอเปอเรเตอร์ที่สงวนไว้

นอกจากนี้ คุณยังใช้ตัวดำเนินการในตัวที่สงวนไว้ type, before, after, objecttype เพื่อปรับปรุงการตีความคำค้นหาได้ด้วย เมื่อจัดทำดัชนีเอกสาร ให้ทำดังนี้

  1. ป้อนข้อมูลในช่อง updateTime ใน ItemMetadata เพื่อใช้โอเปอเรเตอร์ before และ after การตั้งค่าเหล่านี้ช่วยให้ Cloud Search สามารถตีความคำค้นหาต่อไปนี้ได้

    • "ภาพยนตร์จากสัปดาห์ที่แล้ว" จะแสดงภาพยนตร์ทั้งหมดที่อัปเดตในดัชนีเมื่อสัปดาห์ก่อนหน้า
    • "movies before jan 2019" จะแสดงภาพยนตร์ทั้งหมดที่ได้รับการจัดทำดัชนีก่อนเดือนมกราคม 2019
  2. ป้อนข้อมูลในช่อง mimeType ใน ItemMetadata เพื่อใช้การตรวจหาประเภทโดยอัตโนมัติ การค้นหา "วิดีโอแอ็กชัน" จะแสดงเอกสารภาพยนตร์แอ็กชันทั้งหมดที่มี MIME Type เป็น application/mp4, application/mpeg4, application/x-shockwave-flash, video/ และ application/vnd.google-apps.video

ข้อจำกัดในการตีความคำค้นหา

ฟีเจอร์การตีความคำค้นหามีข้อจำกัดต่อไปนี้

  • การตีความการค้นหาใช้ได้กับ ACL ของแหล่งข้อมูลต่อไปนี้เท่านั้น
    • เอกสารทั้งหมดเป็นแบบสาธารณะในโดเมน (ทุกคนในโดเมนเข้าถึงได้)
    • เอกสารทั้งหมดเป็นแบบสาธารณะของแหล่งข้อมูล (ทุกคนที่มีสิทธิ์เข้าถึง ACL ของแหล่งข้อมูล)
    • เอกสารส่วนใหญ่ในแหล่งข้อมูลมี ACL เดียวกัน (เอกสารทั้งหมด รับช่วง ACL จากรายการคอนเทนเนอร์เดียวกัน) โดยไม่มีการกำหนดผู้อ่านเพิ่มเติม
  • หากโอเปอเรเตอร์สคีมาหลายรายการมีค่าเดียวกัน การตีความ ค่าดังกล่าวเป็นความตั้งใจของโอเปอเรเตอร์สำหรับคำค้นหาจะขึ้นอยู่กับปัจจัยความเชื่อมั่นโดยรวม ที่ระบบการตีความคำค้นหาแสดงผล เช่น สมมติว่าคุณมีพร็อพเพอร์ตี้ priority และ severity ที่มีชื่อโอเปอเรเตอร์เดียวกันซึ่งกำหนดไว้ในสคีมา สมมติว่าโอเปอเรเตอร์ทั้ง 2 ตัวมีค่าเป็น 0, 1, 2 หรือ 3 ได้ ในตัวอย่างนี้ "0" ในการค้นหาอาจหมายถึงค่าโอเปอเรเตอร์สำหรับ priority หรือ severity ค่าเหล่านี้ไม่ชัดเจนและระดับความเชื่อมั่นต่ำกว่า
  • โดยค่าเริ่มต้น การตีความคำค้นหาของ Cloud Search จะแปลงค่าฟิลด์เป็นตัวพิมพ์เล็กเมื่อตีความคำค้นหา ยกเว้นโอเปอเรเตอร์ข้อความที่กำหนดด้วยตัวเลือก exactMatchWithOperator
  • ไม่รองรับโอเปอเรเตอร์ source ในการค้นหา
  • ระบบจะไม่ตีความคำค้นหาที่รวมคำตามโอเปอเรเตอร์และคำที่เป็นข้อความอิสระ เช่น ระบบจะไม่รองรับการค้นหา "p0 priority cases severity:s0" เนื่องจาก "p0 priority cases" เป็นข้อความอิสระ ส่วน "severity:s0" เป็นคำที่ใช้ตัวดำเนินการ
  • กลยุทธ์การตีความคำค้นหาจะผสานผลลัพธ์ที่ตีความแล้วเข้ากับผลลัพธ์ปกติ (ที่ไม่ได้ตีความและจัดอันดับตามความเกี่ยวข้อง) เสมอ แต่จะไม่แทนที่ผลการค้นหาทั้งหน้า