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

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

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

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

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

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

สำหรับตัวอย่างนี้ การตีความการค้นหาจะเป็นดังนี้

  • กำหนดจากสคีมาว่าออบเจ็กต์ระดับบนสุดคือ objecttype:movies
  • สแกนเอกสารเพื่อระบุตำแหน่งที่คำว่า "แอ็กชัน" ปรากฏ หากคำนี้ปรากฏในช่อง genre เป็นหลัก ความน่าเชื่อถือจะเพิ่มขึ้นว่าคำนี้เป็นค่าพร็อพเพอร์ตี้สำหรับช่องดังกล่าว

การตีความที่ได้คือ: actor:"tom hanks" genre:action objecttype:movies

การตีความการค้นหาจะดำเนินการโดยอัตโนมัติสำหรับผู้ใช้ทุกคน แต่คุณสามารถเพิ่มประสิทธิภาพได้โดยการจัดโครงสร้างสคีมาตามที่อธิบายไว้ในส่วนต่อไปนี้

จัดโครงสร้างสคีมาสำหรับการตีความการค้นหา

การเพิ่มประสิทธิภาพสคีมาจะช่วยให้คุณได้รับประโยชน์จากการตีความการค้นหา

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

การตีความการค้นหาใช้ objectDefinitions และ propertyDefinitions เพื่อตีความการค้นหา สร้างชื่อที่แสดงที่ใช้งานง่ายโดยใช้ displayLabel สำหรับพร็อพเพอร์ตี้ objectDisplayLabel สำหรับออบเจ็กต์ และ operatorName สำหรับโอเปอเรเตอร์

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

{
  "objectDefinitions": [{
    "name": "movie",
    "options": {
      "displayOptions": { "objectDisplayLabel": "Films" }
    },
    "propertyDefinitions": [{
      "name": "genre",
      "isReturnable": true,
      "textPropertyOptions": {
        "operatorOptions": { "operatorName": "genre" }
      },
      "displayOptions": { "displayLabel": "Category" }
    }]
  }]
}

ชื่อที่แสดงเหล่านี้ช่วยให้ตีความได้ดังนี้

  • "action movies" -> genre:action object:movies
  • "movies with genre action or thriller" -> objecttype:movies genre:(action OR thriller)
  • "comedy category movies" -> genre:comedy objecttype:movies

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

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

ตัวอย่างนี้จะเปิดใช้ตัวเลือกต่อไปนี้

{
  "objectDefinitions": [{
    "propertyDefinitions": [
      {
        "name": "runtime",
        "isSortable": true,
        "integerPropertyOptions": {
          "operatorOptions": {
            "operatorName": "runtime",
            "lessThanOperatorName": "runtimelessthan",
            "greaterThanOperatorName": "runtimegreaterthan"
          }
        }
      },
      {
        "name": "releasedate",
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "releasedate",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

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

  • "movies released this year" -> objecttype:movies releasedafter:2019-1-1 releasedbefore:2019-12-31
  • "movies with runtime less than 90" -> objecttype:movies runtimelessthan:90

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

ใช้โอเปอเรเตอร์ในตัว เช่น type, before, after และ objecttype โดยทำดังนี้

  1. ป้อนข้อมูลใน updateTime ใน ItemMetadata เพื่อใช้ before และ after
  2. ป้อนข้อมูลใน mimeType ใน ItemMetadata เพื่อให้ระบบตรวจหาโดยอัตโนมัติ เช่น "action videos" จะแสดงเอกสารที่มีประเภท MIME ของวิดีโอ

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

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