إنشاء مخطط وتسجيله

مخطط Google Cloud Search هو بنية JSON تحدّد الكائنات والخصائص والخيارات لفهرسة البيانات وطلبها. يستخدِم رابط المحتوى المخطط المسجَّل لتنظيم بيانات المستودع وفهرستها.

يمكنك إنشاء مخطط من خلال توفير كائن مخطط JSON إلى واجهة برمجة التطبيقات. يجب تسجيل مخطط لكل مستودع قبل فهرسة البيانات.

يتناول هذا المستند أساسيات إنشاء المخطط. لتحسين تجربة البحث، يُرجى الاطّلاع على مقالة تحسين جودة البحث.

إنشاء مخطط

اتّبِع الخطوات التالية لإنشاء مخطط Cloud Search:

  1. تحديد سلوك المستخدم المتوقّع
  2. تهيئة مصدر بيانات
  3. تحديد الكائنات
  4. تحديد خصائص الكائن
  5. تسجيل المخطط
  6. فهرسة البيانات
  7. اختبار المخطط
  8. تحسين المخطط

تحديد سلوك المستخدم المتوقّع

يساعد توقُّع طريقة بحث المستخدمين في تحديد استراتيجية المخطط. بالنسبة إلى قاعدة بيانات أفلام، قد يبحث المستخدمون عن "أفلام من بطولة روبرت ريدفورد". يجب أن يتيح المخطط طلبات البحث عن أفلام من بطولة ممثل معيّن.

لمواءمة المخطط مع سلوك المستخدم:

  1. تقييم طلبات البحث المتنوّعة من مستخدمين مختلفين
  2. تحديد مجموعات البيانات المنطقية أو الكائنات، مثل "فيلم"
  3. تحديد الخصائص (السمات)، مثل العنوان أو تاريخ الإصدار
  4. تحديد القيم الصالحة للخصائص، مثل "Raiders of the Lost Ark"
  5. تحديد احتياجات الترتيب والتصنيف، مثل الترتيب الزمني أو تقييمات الجمهور
  6. تحديد خصائص السياق، مثل الدور الوظيفي، لتحسين اقتراحات الإكمال التلقائي
  7. إدراج هذه الكائنات والخصائص والقيم النموذجية استخدِم هذه القائمة لـ تحديد خيارات عامل التشغيل.

تهيئة مصدر البيانات

يمثّل مصدر البيانات بيانات المستودع المفهرَسة المخزَّنة في Google Cloud. يمكنك الاطّلاع على مقالة إدارة مصادر بيانات الجهات الخارجية. عندما ينقر المستخدم على نتيجة، يوجّهه Cloud Search إلى العنصر باستخدام عنوان URL من طلب الفهرسة.

تحديد الكائنات

الكائن هو الوحدة الأساسية للمخطط. تُعدّ البُنى المنطقية، مثل "فيلم" أو "شخص"، كائنات. يتضمّن كل كائن خصائص ، مثل العنوان أو المدة أو الاسم.

رسم مخططات ربط بين الكيانات
الشكل 1. مخطط نموذجي يتضمّن كائنَين وكائنًا فرعيًا.

المخطط schema هو قائمة بـ تعريفات الكائنات في العلامة objectDefinitions.

{
  "objectDefinitions": [
    { "name": "movie" },
    { "name": "person" }
  ]
}

استخدِم أسماء فريدة لكل كائن، مثل movie. تستخدِم خدمة المخطط هذه الأسماء كمفاتيح. يمكنك الاطّلاع على ObjectDefinition.

تحديد خصائص الكائن

حدِّد الخصائص، مثل العنوان وتاريخ الإصدار، في قسم propertyDefinitions. استخدِم options لـ freshnessOptions (الترتيب) و displayOptions (تصنيفات واجهة المستخدم).

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": true,
        "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": { "operatorName": "title" }
        },
        "displayOptions": { "displayLabel": "Title" }
      },
      {
        "name": "releaseDate",
        "isReturnable": true,
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "released",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

يتضمّن PropertyDefinition ما يلي:

  • سلسلة name
  • خيارات مستقلة عن النوع (مثل isReturnable)
  • نوع وخيارات خاصة بالنوع (مثل textPropertyOptions)
  • operatorOptions لعوامل تشغيل البحث
  • displayOptions لتصنيفات واجهة المستخدم

يمكنك إعادة استخدام أسماء الخصائص في كائنات مختلفة. على سبيل المثال، movieTitle يمكن أن يظهر في كل من كائن movie وفي قائمة الأفلام لكائن person.

إضافة خيارات مستقلة عن النوع

PropertyDefinition يتضمّن خيارات منطقية لضبط وظيفة البحث لخاصية، بغض النظر عن نوعها. تكون هذه الخيارات مضبوطة تلقائيًا على false ويجب ضبطها على true لاستخدامها.

  • isReturnable: اضبطها على true إذا كان من المفترض عرض بيانات الخاصية في نتائج البحث باستخدام Query API. يمكن استخدام الخصائص غير القابلة للعرض في البحث أو الترتيب بدون ظهورها في النتائج.
  • isRepeatable: اضبطها على true إذا كان بإمكان الخاصية أن تتضمّن قيمًا متعددة. على سبيل المثال، يتضمّن الفيلم تاريخ إصدار واحدًا ولكن يتضمّن عدة ممثلين.
  • isSortable: اضبطها على true إذا كان بإمكان الخاصية أن تُستخدَم للترتيب. لا يمكن أن تكون true إذا كانت isRepeatable هي true أو إذا كانت الخاصية داخل كائن فرعي قابل للتكرار.
  • isFacetable: اضبطها على true إذا كان بإمكان الخاصية أن تُستخدَم لإنشاء جوانب (سمات تُستخدَم لتحسين نتائج البحث).
    • يجب أن تكون isReturnable هي true.
    • لا تتوفّر هذه الميزة إلا لخصائص التعداد المنطقي والنصية.
  • isWildcardSearchable: اضبطها على true للسماح للمستخدمين بإجراء عمليات بحث باستخدام أحرف البدل في هذه الخاصية. لا يتوفّر هذا الخيار إلا في الخصائص النصية ويعتمد سلوكه على الإعداد exactMatchWithOperator:
    • إذا كانت exactMatchWithOperator هي true: يتم التعامل مع القيمة النصية كرمز مميز واحد. يتطابق طلب بحث مثل science-* مع القيمة science-fiction.
    • إذا كانت exactMatchWithOperator هي false: يتم تقسيم القيمة النصية إلى رموز مميزة. يتطابق طلب بحث مثل sci* أو fi* مع science-fiction، ولكن لا يتطابق مع science-*.

تحديد النوع

اضبط نوع البيانات من خلال تحديد كائن خيارات الخاصية المناسب (مثل textPropertyOptions). استخدِم التعدادات (enumPropertyOptions) إذا كنت تعرف جميع القيم المحتمَلة. يمكن أن تتضمّن الخاصية نوع بيانات واحدًا فقط.

تحديد خيارات عامل التشغيل

تصف operatorOptions طريقة عمل الخاصية كعامل تشغيل بحث.

تحتاج كل operatorOptions إلى operatorName (مثل title). هذا هو المعلمة التي يكتبها المستخدمون في طلبات البحث (مثل title:titanic). استخدِم أسماء بديهية واعرضها للمستخدمين.

يمكنك مشاركة operatorName بين خصائص من النوع نفسه. تستردّ طلبات البحث التي تستخدِم هذا الاسم نتائج من جميع الخصائص المطابقة.

يمكن أن تتضمّن الخصائص القابلة للترتيب lessThanOperatorName وgreaterThanOperatorName لطلبات البحث عن المقارنة. يمكن أن تستخدِم الخصائص النصية exactMatchWithOperator للتعامل مع القيمة بأكملها كرمز مميز واحد.

إضافة خيارات العرض

يحتوي قسم displayOptions الاختياري على displayLabel. هذا هو تصنيف سهل الاستخدام يظهر في نتائج البحث.

إضافة عوامل تشغيل فلترة الاقتراحات

استخدِم suggestionFilteringOperators[] لتحديد خاصية تعمل على فلترة اقتراحات الإكمال التلقائي (مثل فلترة اقتراحات الأفلام حسب النوع المفضّل لدى المستخدم). يمكنك تحديد فلتر اقتراحات واحد فقط.

تسجيل المخطط

سجِّل المخطط في خدمة المخطط باستخدام رقم تعريف مصدر البيانات. أرسِل طلب UpdateSchema تحديث:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

استخدِم validateOnly: true لاختبار المخطط بدون تسجيله.

فهرسة البيانات

بعد التسجيل، املأ مصدر البيانات باستخدام طلبات Index ، عادةً باستخدام رابط.

مثال على طلب الفهرسة:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

اختبار المخطط

اختبِر المخطط باستخدام مستودع صغير قبل استخدامه في بيئة الإنتاج. أنشِئ قائمة التحكّم بالوصول (ACL) التي تقصر النتائج على مستخدم الاختبار.

  • طلب بحث عام: ابحث عن سلسلة (مثل "titanic") للاطّلاع على جميع العناصر المطابقة.
  • طلب بحث باستخدام عامل تشغيل: استخدِم عامل تشغيل (مثل actor:Zane) لتقييد النتائج.

تحسين المخطط

راقِب ملاحظات المستخدمين وعدِّل المخطط. يمكنك فهرسة حقول جديدة أو إعادة تسمية عوامل التشغيل لتكون أكثر بديهية.

إعادة الفهرسة بعد تغيير المخطط

لست بحاجة إلى إعادة الفهرسة لإجراء تغييرات على ما يلي:

  • أسماء عوامل التشغيل
  • الحدود الرقمية
  • الترتيب المرتّب
  • خيارات العرض أو الحداثة

يجب إعادة الفهرسة في الحالات التالية:

  • إضافة خصائص أو كائنات أو إزالتها
  • تغيير isReturnable أو isFacetable أو isSortable إلى true
  • وضع علامة isSuggestable على خاصية

تغييرات الخصائص غير المسموح بها

لا يُسمح بالتغييرات التي تؤدي إلى إتلاف الفهرس أو تتسبب في نتائج غير متسقة، بما في ذلك:

  • نوع بيانات الخاصية أو اسمها
  • إعدادات exactMatchWithOperator أو retrievalImportance

إجراء تغيير معقّد على المخطط

لإجراء تغيير غير مسموح به، عليك نقل الخصائص من تعريف قديم إلى تعريف جديد:

  1. أضِف خاصية جديدة باسم مختلف إلى المخطط.
  2. سجِّل المخطط باستخدام كل من الخصائص الجديدة والقديمة.
  3. املأ الفهرس باستخدام الخاصية الجديدة فقط.
  4. احذف الخاصية القديمة من المخطط.
  5. عدِّل رمز طلب البحث لاستخدام اسم الخاصية الجديد.

يسجِّل Cloud Search العناصر المحذوفة لمدة 30 يومًا لمنع مشاكل إعادة الاستخدام.

الحدود القصوى للحجم

  • 10 كائنات كحد أقصى على المستوى الأعلى
  • 10 مستويات كحد أقصى للعمق
  • 1000 حقل كحد أقصى لكل كائن (بما في ذلك الحقول المضمّنة)

الخطوات التالية

  1. إنشاء واجهة بحث
  2. تحسين جودة البحث.
  3. تنظيم مخطط لتفسير طلب البحث على النحو الأمثل.
  4. تحديد المرادفات.