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

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

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

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

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

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

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

  • กำหนดจากสคีมาว่าออบเจ็กต์ระดับบนสุดคือ objecttype:movies
  • สแกนเอกสารเพื่อระบุตำแหน่งที่คำว่า "action" ปรากฏ หากคำดังกล่าวปรากฏในช่อง 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")
  • ระบบจะผสานผลการค้นหากับผลการค้นหาที่จัดอันดับตามความเกี่ยวข้องเสมอ