موصل المحتوى هو برنامج يتنقّل بين البيانات في مستودع مؤسسة ويملأ مصدر بيانات. توفّر Google الخيارات التالية لتطوير موصّلات المحتوى:
حزمة تطوير البرامج (SDK) الخاصة بموصل المحتوى هذا الخيار مناسب لمبرمجي Java. مجموعة تطوير البرامج (SDK) هي برنامج تضمين لواجهة REST API تتيح لك إنشاء موصِّلات بسرعة. لإنشاء موصّل محتوى باستخدام حزمة SDK، راجِع إنشاء موصّل محتوى باستخدام حزمة Content Connector SDK.
واجهة برمجة تطبيقات REST منخفضة المستوى أو مكتبات واجهة برمجة التطبيقات استخدِم هذه الخيارات إذا كنت لا تستخدم Java أو إذا كان الرمز البرمجي الخاص بك يتوافق بشكل أفضل مع واجهة برمجة تطبيقات REST أو مكتبة. لإنشاء موصّل محتوى باستخدام REST API، يُرجى الاطّلاع على إنشاء موصّل محتوى باستخدام REST API.
يُجري موصّل المحتوى النموذجي المهام التالية:
- تقرأ هذه السمة مَعلمات الإعداد وتعالجها.
- يستخرج هذا الموصل أجزاء منفصلة من البيانات القابلة للفهرسة، تُعرف باسم "العناصر"، من المستودع التابع للجهة الخارجية.
- يجمع بين قوائم التحكّم بالوصول والبيانات الوصفية وبيانات المحتوى في عناصر قابلة للفهرسة.
- يفهرس العناصر في مصدر بيانات Cloud Search.
- (اختياري) يستمع إلى إشعارات التغيير من المستودع. يتم تحويل الإشعارات المتعلقة بالتغييرات إلى طلبات فهرسة للحفاظ على مزامنة مصدر بيانات Cloud Search. لا ينفّذ الموصّل هذه المهمة إلا إذا كان المستودع يتيح رصد التغييرات.
إنشاء موصّل محتوى باستخدام Content Connector SDK
توضّح الأقسام التالية كيفية إنشاء أداة ربط محتوى باستخدام حزمة تطوير البرامج (SDK) الخاصة بأداة ربط المحتوى.
إعداد التبعيات
أدرِج هذه التبعيات في ملف الإصدار.
Maven
xml
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
groovy
compile group: 'com.google.enterprise.cloudsearch',
name: 'google-cloudsearch-indexing-connector-sdk',
version: 'v1-0.0.3'
إنشاء إعدادات الموصّل
يستخدم كل موصّل ملف إعداد للمَعلمات، مثل رقم تعريف المستودع.
حدِّد المَعلمات كأزواج مفتاح-قيمة، مثل
api.sourceId=1234567890abcdef.
تتضمّن حزمة تطوير البرامج (SDK) في Google Cloud Search مَعلمات مقدَّمة من Google لجميع الموصِّلات. يجب تعريف ما يلي في ملف الإعدادات:
- مُوصِّل المحتوى: يجب الإفصاح عن
api.sourceIdوapi.serviceAccountPrivateKeyFile. تحدّد هذه السلسلة مستودعك والمفتاح الخاص المطلوب للوصول إليه.
- مُوصِّل الهوية: حدِّد
api.identitySourceIdلتحديد مصدر الهوية الخارجي. بالنسبة إلى مزامنة المستخدمين، يجب أيضًا الإفصاح عنapi.customerId(المعرّف الفريد لحسابك على Google Workspace).
لا تحدّد المَعلمات الأخرى التي توفّرها Google إلا لإلغاء قيمها التلقائية. للحصول على تفاصيل حول إنشاء المعرّفات والمفاتيح، يُرجى الاطّلاع على المَعلمات التي توفّرها Google.
يمكنك أيضًا تحديد مَعلمات خاصة بالمستودع في ملف الإعداد.
تمرير ملف الإعداد إلى الموصل
اضبط سمة النظام config لتمرير ملف الإعداد. استخدِم وسيطة -D عند بدء الموصّل. على سبيل المثال:
java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector
في حال حذف هذه الوسيطة، تحاول حزمة SDK استخدام ملف باسم
connector-config.properties في الدليل المحلي.
تحديد استراتيجية التجوال
تتمثل الوظيفة الأساسية لأداة ربط المحتوى في استكشاف مستودع وفهرسة بياناته. يجب تنفيذ استراتيجية استنادًا إلى حجم المستودع وتصميمه. يمكنك تصميم استراتيجيتك الخاصة أو اختيار استراتيجية من حزمة تطوير البرامج (SDK):
- استراتيجية التنقّل الكامل
- تفحص المستودع بأكمله وتفهرس كل عنصر. هذه الاستراتيجية هي الأفضل للمستودعات الصغيرة التي يمكنك فيها تحمّل تكلفة عمليات البحث الكاملة أثناء كل عملية فهرسة. استخدِمها للمستودعات الصغيرة التي تحتوي على بيانات ثابتة وغير هرمية في الغالب، أو عندما يكون من الصعب رصد التغييرات.
- استراتيجية التنقّل في القائمة
- تفحص المستودع بأكمله لتحديد حالة كل عنصر، ثم تفهرس العناصر الجديدة أو المعدَّلة فقط. استخدِم هذا الخيار لإجراء تعديلات تدريجية على فهرس كبير غير هرمي عندما لا تكون ميزة رصد التغييرات متاحة.
- اجتياز الرسم البياني
- يفحص عقدة رئيسية لتحديد حالة عناصرها، ثم يفهرس العناصر الجديدة أو المعدَّلة في تلك العقدة. ثم يعالج العُقد الفرعية بشكل متكرّر. استخدِم هذا النوع للمستودعات الهرمية التي لا يمكن فيها إدراج جميع المعرّفات، مثل بنى الدليل أو المواقع الإلكترونية.
تنفّذ حزمة تطوير البرامج (SDK) هذه الاستراتيجيات في فئات موصِّل النماذج. يمكن أن تساعدك هذه النماذج في تسريع عملية التطوير. لاستخدام نموذج، راجِع القسم المناسب:
- إنشاء موصّل بحث كامل باستخدام فئة نموذج
- إنشاء أداة ربط لتصفّح القوائم باستخدام فئة نموذج
- إنشاء موصّل لتصفّح الرسم البياني باستخدام فئة نموذج
إنشاء أداة ربط بحث كامل باستخدام فئة نموذج
يشير هذا القسم إلى الرمز البرمجي من FullTraversalSample.
تنفيذ نقطة دخول الموصّل
نقطة الدخول هي الطريقة main(). ينشئ هذا الرمز مثيلاً من Application ويستدعي start() لتشغيل الموصل.
قبل استدعاء application.start()، استخدِم الفئة
IndexingApplication.Builder
لإنشاء مثيل للنموذج
FullTraversalConnector. يقبل هذا النموذج عنصر
Repository.
تطلب حزمة تطوير البرامج (SDK) initConfig() بعد أن تطلب طريقتك main()
Application.build(). طريقة initConfig():
- يضمن عدم تهيئة
Configurationمن قبل. - تتم تهيئة العنصر
Configurationباستخدام أزواج المفتاح/القيمة التي توفّرها Google.
تنفيذ واجهة Repository
يتنقّل العنصر Repository بين عناصر المستودع ويفهرسها. عند استخدام نموذج، ما عليك سوى إلغاء بعض الطرق في واجهة Repository. بالنسبة إلى FullTraversalConnector، يمكنك إلغاء ما يلي:
init(): لإعداد المستودع وتهيئته.-
getAllDocs(): للتنقّل بين جميع العناصر وفهرستها يتم استدعاء هذه الدالة مرة واحدة لكل عملية اجتياز مجدولة. - (اختياري)
getChanges(): إذا كان المستودع يتيح رصد التغييرات، يمكنك تجاهل هذا الإعداد لاسترداد العناصر المعدَّلة وفهرستها. - (اختياري)
close(): لتنظيف المستودع أثناء إيقاف التشغيل.
تعرض كل طريقة عنصر ApiOperation، الذي ينفّذ الفهرسة باستخدام IndexingService.indexItem().
الحصول على مَعلمات الإعدادات المخصّصة
للتعامل مع إعدادات الموصل، يجب استرداد أي مَعلمات مخصّصة من عنصر Configuration. نفِّذ هذه المهمة في طريقة init() الخاصة بفئة Repository.
يتضمّن الصف Configuration طرقًا لاسترداد أنواع مختلفة من البيانات.
يعرض كل إجراء عنصر ConfigValue. استخدِم طريقة get() الخاصة بالعنصر ConfigValue لاسترداد القيمة. يوضّح المقتطف التالي من
FullTraversalSample
كيفية استرداد قيمة عدد صحيح مخصّصة:
لاسترداد المَعلمات التي تتضمّن قيمًا متعدّدة وتحليلها، استخدِم أحد محلّلات الأنواع في الفئة Configuration. تستخدم هذه المقتطفة من أداة ربط البرنامج التعليمي
getMultiValue
لاسترداد قائمة بأسماء مستودعات GitHub:
إجراء بحث شامل
استخدِم getAllDocs() لتنفيذ عملية اجتياز كاملة. تقبل هذه الطريقة نقطة حفظ لاستئناف الفهرسة في حال انقطاعها. لكل عنصر:
- تحديد الأذونات
- اضبط البيانات الوصفية.
- اجمعها في
RepositoryDoc. - يجب تجميع كل عنصر في المكرّر الذي تعرضه الدالة
getAllDocs().
إذا كانت مجموعة العناصر كبيرة جدًا بحيث لا يمكن عرضها في مكالمة واحدة، استخدِم نقطة تحقّق واتّصِل بـ hasMore(true).
ضبط الأذونات لعنصر
تستخدم المستودعات قوائم التحكّم بالوصول (ACL) لتحديد المستخدمين أو المجموعات الذين لديهم إذن بالوصول إلى عنصر معيّن. وتتضمّن قائمة التحكّم بالوصول معرّفات المستخدمين أو المجموعات المسموح لهم بالوصول.
لضمان اطّلاع المستخدمين على نتائج البحث التي يمكنهم الوصول إليها فقط، عليك تكرار قوائم التحكّم بالوصول الخاصة بالمستودع. أدرِج قائمة التحكّم بالوصول عند فهرسة عنصر ما ليتمكّن Google Cloud Search من توفير مستوى الوصول الصحيح.
تتضمّن حزمة تطوير البرامج (SDK) الخاصة بأداة Content Connector فئات وطُرقًا لتصميم قوائم التحكّم بالوصول (ACL) لمعظم المستودعات. تحليل قوائم التحكّم بالوصول في المستودع وإنشاء قوائم تحكّم بالوصول مماثلة في Cloud Search أثناء الفهرسة يتطلّب تصميم قوائم التحكم في الوصول المعقّدة، مثل تلك التي تستخدم ميزة "الميراث"، تخطيطًا دقيقًا. لمزيد من المعلومات، يُرجى الاطّلاع على قوائم التحكّم بالوصول في Cloud Search.
استخدِم فئة
Acl.Builder
لضبط إذن الوصول. يسمح هذا المقتطف من نموذج التنقّل الكامل لجميع مستخدمي النطاق (getCustomerPrincipal()) بقراءة جميع العناصر (setReaders()):
يتطلّب تصميم قوائم التحكّم بالوصول الخاصة بالمستودع بشكل صحيح، خاصةً تلك التي تستخدم نماذج الوراثة، المعلومات الواردة في قوائم التحكّم بالوصول في Cloud Search.
ضبط البيانات الوصفية لعنصر
يتم تخزين بيانات التعريف في عنصر Item. لإنشاء Item، تحتاج إلى رقم تعريف فريد ونوع العنصر وقائمة التحكّم بالوصول وعنوان URL والإصدار. استخدِم فئة الأداة المساعدة
IndexingItemBuilder.
إنشاء العنصر القابل للفهرسة
استخدِم فئة
RepositoryDoc.Builder.
RepositoryDoc هو ApiOperation ينفّذ طلب IndexingService.indexItem().
استخدِم طريقة
setRequestMode()
في الفئة RepositoryDoc.Builder لضبط طلب الفهرسة على
ASYNCHRONOUS أو SYNCHRONOUS:
ASYNCHRONOUS- يستغرق هذا الوضع وقتًا أطول في الانتقال من الفهرسة إلى العرض، ولكنّه يتيح حصة أكبر من معدل النقل. استخدِم الوضع غير المتزامن للفهرسة الأولية (التعبئة الخلفية) لمستودع كامل.
SYNCHRONOUS- يتميّز هذا الوضع بوقت استجابة أقصر بين الفهرسة والعرض، ولكنّه يتضمّن حصة أصغر من معدّل النقل. استخدِم الوضع المتزامن لتعديلات وتغييرات مستودع الفهرسة. يكون وضع الطلب تلقائيًا
SYNCHRONOUSفي حال عدم تحديده.
تضمين كل عنصر قابل للفهرسة في مكرّر
يعرض الإجراء getAllDocs()
CheckpointCloseableIterable
من عناصر RepositoryDoc. استخدِم فئة
CheckpointCloseableIterableImpl.Builder.
الخطوات التالية
- (اختياري) إذا كانت سرعة نقل البيانات للفهرسة بطيئة، يمكنك الاطّلاع على زيادة معدّل الفهرسة.
- (اختياري) نفِّذ
close()لإتاحة الموارد. - (اختياري) إنشاء موصّل هويات
إنشاء أداة ربط لتصفّح القوائم باستخدام فئة نموذج
يحتوي "قائمة انتظار الفهرسة في Cloud Search" على أرقام تعريف وتجزئة اختيارية لعناصر المستودع. يدفع موصل اجتياز القائمة أرقام التعريف إلى هذه قائمة الانتظار ويسترجعها للفهرسة. تحتفظ Cloud Search بهذه قوائم الانتظار لتحديد حالة العناصر، مثل عمليات الحذف. اطّلِع على قائمة انتظار الفهرسة في Cloud Search.
يشير هذا القسم إلى ListTraversalSample.
تنفيذ نقطة دخول الموصّل
ينشئ الإجراء main() مثيلاً من Application ويستدعي start(). استخدِم
IndexingApplication.Builder لإنشاء نسخة من
نموذج ListingConnector.
تنفيذ واجهة Repository
تجاوز الطرق التالية لـ ListingConnector:
-
init(): لإعداد المستودع -
getIds(): لاسترداد المعرّفات والتجزئة لجميع السجلات. getDoc(): لإضافة عناصر إلى الفهرس أو تعديلها أو حذفها- (اختياري)
getChanges(): لتحديثات تدريجية باستخدام ميزة رصد التغيير - (اختياري)
close(): لتنظيف المستودع.
تنفيذ عملية اجتياز القائمة
استبدِل getIds() لاسترداد أرقام التعريف والتجزئة. يمكنك إلغاء getDoc() للتعامل مع
كل عنصر في قائمة انتظار الفهرسة في Cloud Search.
إرسال معرّفات السلع وقيم التجزئة
تجاوز getIds() لجلب المعرّفات ورموز التجزئة للمحتوى يتم تجميعها في
PushItems
وإرسالها إلى "قائمة انتظار الفهرسة".
استخدِم PushItems.Builder لتجميع المعرّفات والتجزئات.
استرداد كل عنصر ومعالجته
استبدِل getDoc() للتعامل مع العناصر في "قائمة انتظار الفهرسة". يمكن أن تكون العناصر جديدة أو معدَّلة أو بدون تغيير أو محذوفة.
- تحقَّق مما إذا كان معرّف العنصر متوفّرًا في المستودع. إذا لم يكن كذلك، احذفه.
- التحقّق من حالة الفهرس إذا لم يتم تغييرها (
ACCEPTED)، لا تتّخذ أي إجراء. - تغيير الفهرس أو إضافة عناصر جديدة: ضبط الأذونات وضبط البيانات الوصفية والدمج في
RepositoryDocوعرضه
التعامل مع العناصر المحذوفة
يوضّح هذا المقتطف كيفية تحديد ما إذا كان العنصر متوفّرًا وحذفه إذا لم يكن متوفّرًا.
التعامل مع العناصر التي لم تتغير
إرسال طلبات إلى "قائمة انتظار الفهرسة" للتعامل مع العناصر التي لم يتم تغييرها
يستخدِم المثال تجزئة لرصد التغييرات.
ضبط الأذونات لعنصر
تستخدم المستودعات قوائم التحكّم بالوصول (ACL) لتحديد المستخدمين أو المجموعات الذين لديهم إذن بالوصول إلى عنصر معيّن. وتتضمّن قائمة التحكّم بالوصول معرّفات المستخدمين أو المجموعات المسموح لهم بالوصول.
لضمان اطّلاع المستخدمين على نتائج البحث التي يمكنهم الوصول إليها فقط، عليك تكرار قوائم التحكّم بالوصول الخاصة بالمستودع. أدرِج قائمة التحكّم بالوصول عند فهرسة عنصر ما ليتمكّن Google Cloud Search من توفير مستوى الوصول الصحيح.
تتضمّن حزمة تطوير البرامج (SDK) الخاصة بأداة Content Connector فئات وطُرقًا لتصميم قوائم التحكّم بالوصول (ACL) لمعظم المستودعات. تحليل قوائم التحكّم بالوصول في المستودع وإنشاء قوائم تحكّم بالوصول مماثلة في Cloud Search أثناء الفهرسة يتطلّب تصميم قوائم ACL المعقّدة، مثل تلك التي تستخدم ميزة "الميراث"، تخطيطًا دقيقًا. لمزيد من المعلومات، يُرجى الاطّلاع على قوائم التحكّم بالوصول في Cloud Search.
استخدِم فئة
Acl.Builder
لضبط إذن الوصول. يسمح هذا المقتطف من نموذج البحث الكامل لجميع مستخدمي النطاق (getCustomerPrincipal()) بقراءة جميع العناصر (setReaders()):
يتطلّب تصميم قوائم التحكّم بالوصول الخاصة بالمستودع بشكل صحيح، لا سيما تلك التي تستخدم نماذج الوراثة، المعلومات الواردة في قوائم التحكّم بالوصول في Cloud Search.
ضبط البيانات الوصفية لعنصر
إنشاء عنصر قابل للفهرسة
استخدِم طريقة
setRequestMode()
في الفئة RepositoryDoc.Builder لضبط طلب الفهرسة على
ASYNCHRONOUS أو SYNCHRONOUS:
ASYNCHRONOUS- يستغرق هذا الوضع وقتًا أطول في الانتقال من الفهرسة إلى العرض، ولكنّه يتيح حصة أكبر من معدل النقل. استخدِم الوضع غير المتزامن للفهرسة الأولية (التعبئة الخلفية) لمستودع كامل.
SYNCHRONOUS- يتميّز هذا الوضع بوقت استجابة أقصر بين الفهرسة والعرض، ولكنّه يتضمّن حصة أصغر من معدّل النقل. استخدِم الوضع المتزامن لتعديلات وتغييرات مستودع الفهرسة. يكون وضع الطلب تلقائيًا
SYNCHRONOUSفي حال عدم تحديده.
الخطوات التالية
في ما يلي بعض الخطوات التالية التي يمكنك اتّخاذها:
- (اختياري) نفِّذ طريقة
close()لتحرير أي موارد قبل الإيقاف. - (اختياري) إنشاء موصّل هويات باستخدام Content Connector SDK
إنشاء أداة ربط لتصفّح الرسوم البيانية باستخدام فئة نموذج
يحتوي "قائمة انتظار الفهرسة" في Cloud Search على أرقام تعريف وقيم تجزئة اختيارية لكل عنصر في المستودع. يدفع موصّل اجتياز الرسم البياني معرّفات العناصر إلى قائمة انتظار الفهرسة في Google Cloud Search ويسترجعها واحدًا تلو الآخر لفهرستها. يحتفظ Google Cloud Search بقوائم انتظار ويقارن محتوى القوائم لتحديد حالة العناصر، مثل ما إذا كان قد تم حذف عنصر من المستودع. لمزيد من المعلومات حول قائمة انتظار الفهرسة في Cloud Search، يُرجى الاطّلاع على قائمة انتظار الفهرسة في Google Cloud Search.
أثناء الفهرسة، يتم استرداد محتوى العنصر من مستودع البيانات، ويتم إرسال أي أرقام تعريف لعناصر فرعية إلى قائمة الانتظار. يعالج الموصل بشكل متكرّر أرقام تعريف العناصر الرئيسية والعناصر الفرعية إلى أن يتم التعامل مع جميع العناصر.
تنفيذ نقطة دخول الموصّل
نقطة الدخول إلى الموصّل هي الطريقة
main(). تنشئ هذه الطريقة مثيلاً لفئة
Application
وتستدعي الطريقة
start()
لتشغيل الموصل.
قبل طلب
application.start()،
استخدِم الفئة
IndexingApplication.Builder
لإنشاء نسخة من النموذج ListingConnector. يقبل
ListingConnector
عنصر
Repository
تنفّذ طرقه.
تنفيذ واجهة Repository
يمكنك إلغاء init() وgetIds() وgetDoc()، ويمكنك أيضًا إلغاء getChanges() أو close().
تنفيذ عملية اجتياز الرسم البياني
يمكنك إلغاء getIds() لاسترداد المعرّفات الأولية وgetDoc() للتعامل مع العناصر وإرسال معرّفات العناصر التابعة إلى قائمة الانتظار.
إرسال معرّفات السلع وقيم التجزئة
استرداد كل عنصر ومعالجته
- تحقَّق مما إذا كان المعرّف متوفّرًا في المستودع. إذا لم يكن كذلك، احذف العنصر.
- بالنسبة إلى العناصر الحالية، اضبط الأذونات والبيانات الوصفية، ثم ادمجها في
RepositoryDoc. - إرسال أرقام تعريف العناصر الفرعية إلى "قائمة انتظار الفهرسة"
- الرجوع إلى
RepositoryDoc
التعامل مع العناصر المحذوفة
ضبط البيانات الوصفية وإنشاء العنصر
وضع أرقام تعريف الحسابات الفرعية في "قائمة انتظار الفهرسة"
إنشاء موصّل محتوى باستخدام REST API
توضّح الأقسام التالية كيفية إنشاء أداة ربط محتوى باستخدام واجهة REST API.
تحديد استراتيجية التجوال
تتشابه الاستراتيجيات (الكاملة والقائمة والرسم البياني) من الناحية النظرية مع تلك المتّبعة في حزمة تطوير البرامج (SDK). نفِّذ استراتيجيتك المختارة باستخدام REST API.
تنفيذ استراتيجية الانتقال وفهرسة العناصر
سجِّل المخطط، ثم املأ الفهرس باستخدام:
- (اختياري)
items.uploadللملفات التي يزيد حجمها عن 100 كيلوبايت. - (اختياري)
media.uploadلملفات الوسائط اضغط على
items.indexلفهرسة العنصر.مثال على طلب الفهرسة:
{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "http://www.imdb.com/title/tt2234155/", "objectType": "movie" }, "structuredData": { "object": { "properties": [ { "name": "movieTitle", "textValues": { "values": ["Titanic"] } } ] } }, "content": { "inlineContent": "A seventeen-year-old aristocrat falls in love...", "contentFormat": "TEXT" }, "version": "01", "itemType": "CONTENT_ITEM" }(اختياري) استخدِم
items.getللتحقّق من الفهرسة.
التعامل مع تغييرات المستودع
إعادة فهرسة المستودع بأكمله بشكل دوري لإجراء الفهرسة الكاملة للتنقّل في القوائم أو الرسوم البيانية، استخدِم قائمة انتظار الفهرسة في Google Cloud لتتبُّع التغييرات وفهرسة المحتوى الذي تم تغييره فقط. استخدِم items.push لإضافة عناصر إلى قائمة المحتوى التالي.