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

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

ผลลัพธ์จริงที่แสดงให้ผู้ใช้เห็นจะขึ้นอยู่กับความเชื่อมั่น ของการแปลความหมายคำค้นหา ความเชื่อมั่นขึ้นอยู่กับปัจจัยหลายอย่าง ซึ่งรวมถึงตำแหน่งที่สตริงการค้นหาปรากฏในเอกสารที่จัดทำดัชนี สตริง เช่น ชื่อนักแสดง "Tom Hanks" ปรากฏอย่างต่อเนื่องใน สคีมาชื่อ 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 เป็น "ภาพยนตร์"

  • ประเภท propertyDefinition มี operatorName เป็น "genre" และ "Category" 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: ภาพยนตร์” และ ผลลัพธ์ที่แสดงจะจัดเรียงในวันที่เปิดตัวด้วยลำดับการจัดเรียงเริ่มต้น จากน้อยไปมาก

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

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

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

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

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

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

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