رابط محتوا یک برنامه نرمافزاری است که دادهها را در یک مخزن سازمانی پیمایش میکند و یک منبع داده را پر میکند. گوگل گزینههای زیر را برای توسعه رابطهای محتوا ارائه میدهد:
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK). این گزینه خوبی برای برنامهنویسان جاوا است. SDK یک پوشش پیرامون REST API است که به شما امکان میدهد به سرعت رابطها را ایجاد کنید. برای ایجاد یک رابط محتوا با استفاده از SDK، به بخش «ایجاد یک رابط محتوا با استفاده از SDK رابط محتوا» مراجعه کنید.
یک API سطح پایین REST یا کتابخانههای API. اگر از جاوا استفاده نمیکنید یا اگر کدبیس شما با API REST یا یک کتابخانه سازگارتر است، از این گزینهها استفاده کنید. برای ایجاد یک رابط محتوا با استفاده از REST API، به بخش ایجاد یک رابط محتوا با استفاده از REST API مراجعه کنید.
یک رابط محتوای معمولی وظایف زیر را انجام میدهد:
- پارامترهای پیکربندی را میخواند و پردازش میکند.
- تکههای گسسته از دادههای قابل فهرستبندی، به نام " آیتمها "، را از مخزن شخص ثالث دریافت میکند.
- ACLها، فرادادهها و دادههای محتوا را در آیتمهای قابل فهرستبندی ترکیب میکند.
- آیتمها را در منبع داده Cloud Search فهرستبندی میکند.
- (اختیاری) به اعلانهای تغییر از مخزن گوش میدهد. اعلانهای تغییر به درخواستهای نمایهسازی تبدیل میشوند تا منبع داده Cloud Search را همگام نگه دارند. رابط فقط در صورتی این کار را انجام میدهد که مخزن از تشخیص تغییر پشتیبانی کند.
با استفاده از کیت توسعه نرمافزاری رابط محتوا (Content Connector SDK)، یک رابط محتوا (content connector) ایجاد کنید.
بخشهای زیر نحوه ایجاد یک رابط محتوا با استفاده از کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) را توضیح میدهند.
وابستگیها را تنظیم کنید
این وابستگیها را در فایل ساخت خود لحاظ کنید.
ماون
xml <dependency> <groupId>com.google.enterprise.cloudsearch</groupId> <artifactId>google-cloudsearch-indexing-connector-sdk</artifactId> <version>v1-0.0.3</version> </dependency>
گرادل
groovy compile group: 'com.google.enterprise.cloudsearch', name: 'google-cloudsearch-indexing-connector-sdk', version: 'v1-0.0.3'
پیکربندی کانکتور خود را ایجاد کنید
هر کانکتور از یک فایل پیکربندی برای پارامترهایی مانند شناسه مخزن شما استفاده میکند. پارامترها را به صورت جفتهای کلید-مقدار تعریف کنید، مانند api.sourceId= 1234567890abcdef .
کیت توسعه نرمافزار جستجوی ابری گوگل (Google Cloud Search SDK) شامل پارامترهای ارائه شده توسط گوگل برای همه کانکتورها است. شما باید موارد زیر را در فایل پیکربندی خود اعلام کنید:
- رابط محتوا :
api.sourceIdوapi.serviceAccountPrivateKeyFileرا تعریف کنید. اینها مخزن شما و کلید خصوصی مورد نیاز برای دسترسی را مشخص میکنند.
- رابط هویت : برای شناسایی منبع هویت خارجی خود،
api.identitySourceIdرا تعریف کنید. برای همگامسازی کاربر،api.customerId(شناسه منحصر به فرد برای حساب Google Workspace شما) را نیز تعریف کنید.
پارامترهای ارائه شده توسط گوگل را فقط طوری تعریف کنید که مقادیر پیشفرض آنها لغو شود. برای جزئیات بیشتر در مورد تولید شناسهها و کلیدها، به پارامترهای ارائه شده توسط گوگل مراجعه کنید.
همچنین میتوانید پارامترهای مختص مخزن را در فایل پیکربندی خود تعریف کنید.
فایل پیکربندی را به کانکتور ارسال کنید
ویژگی سیستم 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 پس از فراخوانی Application.build() ) توسط متد main() شما، تابع initConfig() () را فراخوانی میکند. متد initConfig() به صورت زیر است:
- اطمینان حاصل میکند که
Configurationاز قبل مقداردهی اولیه نشده است. - شیء
Configurationرا با جفتهای کلید-مقدار ارائه شده توسط گوگل، مقداردهی اولیه میکند.
پیادهسازی رابط مخزن (Repository)
شیء Repository آیتمهای مخزن را پیمایش و فهرستبندی میکند. هنگام استفاده از یک الگو، فقط باید متدهای خاصی را در رابط Repository بازنویسی کنید. برای FullTraversalConnector ، بازنویسی کنید:
-
init(): برای تنظیم و مقداردهی اولیه مخزن. -
getAllDocs(): برای پیمایش و فهرستبندی همه آیتمها. این متد برای هر پیمایش زمانبندیشده یک بار فراخوانی میشود. - (اختیاری)
getChanges(): اگر مخزن شما از تشخیص تغییر پشتیبانی میکند، این را برای بازیابی و فهرستبندی موارد تغییر یافته بازنویسی کنید. - (اختیاری)
close(): برای پاکسازی مخزن در هنگام خاموش شدن سیستم.
هر متد یک شیء ApiOperation برمیگرداند که با استفاده از IndexingService.indexItem() ایندکسگذاری را انجام میدهد.
دریافت پارامترهای پیکربندی سفارشی
برای مدیریت پیکربندی کانکتور خود، باید هرگونه پارامتر سفارشی را از شیء Configuration بازیابی کنید. این کار را در متد init() کلاس Repository خود انجام دهید.
کلاس Configuration شامل متدهایی برای بازیابی انواع مختلف داده است. هر متد یک شیء ConfigValue را برمیگرداند. از متد get() شیء ConfigValue برای بازیابی مقدار استفاده کنید. این قطعه کد از FullTraversalSample نحوه بازیابی یک مقدار صحیح سفارشی را نشان میدهد:
برای بازیابی و تجزیه پارامترهایی با چندین مقدار، از یکی از تجزیهکنندههای نوع کلاس Configuration استفاده کنید. این قطعه کد از رابط آموزشی از getMultiValue برای بازیابی لیستی از نامهای مخزن GitHub استفاده میکند:
انجام پیمایش کامل
برای انجام یک پیمایش کامل، تابع getAllDocs() را نادیده میگیرد. این متد یک نقطهی بررسی میپذیرد تا در صورت قطع شدن، اندیسگذاری را از سر بگیرد. برای هر آیتم:
- مجوزها را تنظیم کنید.
- تنظیم فراداده (metadata).
- آنها را در یک
RepositoryDocترکیب کنید. - هر آیتم را در تکرارکنندهای که توسط
getAllDocs()برگردانده میشود، بستهبندی کنید.
اگر مجموعه اقلام برای یک فراخوانی خیلی بزرگ است، از یک Checkpoint استفاده کنید و تابع hasMore(true) را فراخوانی کنید.
تنظیم مجوزها برای یک مورد
مخازن از لیستهای کنترل دسترسی (ACL) برای شناسایی کاربران یا گروههایی که به یک مورد دسترسی دارند استفاده میکنند. یک ACL، شناسههای کاربران یا گروههای مجاز را فهرست میکند.
برای اطمینان از اینکه کاربران فقط نتایج جستجویی را که مجاز به دسترسی به آنها هستند، مشاهده میکنند، باید ACL های مخزن خود را تکثیر کنید. هنگام فهرستبندی یک مورد، ACL را نیز لحاظ کنید تا Google Cloud Search بتواند سطح دسترسی صحیح را ارائه دهد.
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) شامل کلاسها و روشهایی برای مدلسازی ACLهای اکثر مخازن است. ACLهای مخزن خود را تجزیه و تحلیل کنید و ACLهای مربوطه را برای جستجوی ابری (Cloud Search) در حین فهرستبندی ایجاد کنید. مدلسازی ACLهای پیچیده، مانند آنهایی که از وراثت استفاده میکنند، نیاز به برنامهریزی دقیق دارد. برای اطلاعات بیشتر، به ACLهای جستجوی ابری (Cloud Search ACLs) مراجعه کنید.
از کلاس Acl.Builder برای تنظیم دسترسی استفاده کنید. این قطعه کد از نمونه کامل پیمایش به همه کاربران دامنه ( getCustomerPrincipal() ) اجازه میدهد همه موارد ( setReaders() ) را بخوانند:
مدلسازی صحیح ACLهای مخزن، به ویژه آنهایی که از مدلهای وراثت استفاده میکنند، به اطلاعات موجود در ACLهای جستجوی ابری نیاز دارد.
تنظیم فراداده برای یک آیتم
متادیتا در یک شیء Item ذخیره میشود. برای ایجاد یک Item ، به یک شناسه منحصر به فرد، نوع آیتم، ACL، URL و نسخه نیاز دارید. از کلاس کمکی IndexingItemBuilder استفاده کنید.
ایجاد آیتم قابل فهرستبندی
از کلاس RepositoryDoc.Builder استفاده کنید.
یک RepositoryDoc یک ApiOperation است که درخواست IndexingService.indexItem() را انجام میدهد.
از متد setRequestMode() از کلاس RepositoryDoc.Builder برای تنظیم درخواست ایندکسگذاری روی ASYNCHRONOUS یا SYNCHRONOUS استفاده کنید:
-
ASYNCHRONOUS - این حالت تأخیر بیشتری در اندیسگذاری تا ارائه سرویس دارد اما سهمیه توان عملیاتی بیشتری را در خود جای میدهد. از حالت ناهمزمان برای اندیسگذاری اولیه (backfill) کل مخزن استفاده کنید.
-
SYNCHRONOUS - این حالت تأخیر کمتری در اندیسگذاری تا ارائه سرویس دارد، اما سهمیه توان عملیاتی کمتری دارد. از حالت همگام برای اندیسگذاری بهروزرسانیها و تغییرات مخزن استفاده کنید. در صورت عدم تعیین، حالت درخواست به صورت پیشفرض روی
SYNCHRONOUSتنظیم میشود.
هر آیتم قابل فهرستبندی را در یک تکرارکننده بستهبندی کنید
متد getAllDocs() یک CheckpointCloseableIterable از اشیاء RepositoryDoc برمیگرداند. از کلاس CheckpointCloseableIterableImpl.Builder استفاده کنید.
مراحل بعدی
- (اختیاری) اگر سرعت ایندکسگذاری پایین است، به افزایش نرخ ایندکسگذاری مراجعه کنید.
- (اختیاری) برای آزادسازی منابع، تابع
close()را پیادهسازی کنید. - (اختیاری) یک رابط هویت ایجاد کنید .
با استفاده از یک کلاس الگو، یک رابط پیمایش لیست ایجاد کنید
صف نمایهسازی جستجوی ابری، شناسهها و هشهای اختیاری را برای اقلام مخزن نگه میدارد. یک رابط پیمایش لیست، شناسهها را به این صف ارسال کرده و آنها را برای نمایهسازی بازیابی میکند. جستجوی ابری این صفها را برای تعیین وضعیت اقلام، مانند حذفها، نگهداری میکند. به صف نمایهسازی جستجوی ابری مراجعه کنید.
این بخش به ListTraversalSample اشاره دارد.
نقطه ورود کانکتور را پیادهسازی کنید
متد main() یک نمونه Application ایجاد میکند و start() را فراخوانی میکند. IndexingApplication.Builder برای نمونهسازی الگوی ListingConnector استفاده کنید.
پیادهسازی رابط مخزن (Repository)
متدهای زیر را برای ListingConnector بازنویسی کنید:
-
init(): برای تنظیم مخزن. -
getIds(): برای بازیابی شناسهها و هشها برای همه رکوردها. -
getDoc(): برای اضافه کردن، بهروزرسانی یا حذف آیتمها از ایندکس. - (اختیاری)
getChanges(): برای بهروزرسانیهای افزایشی با استفاده از تشخیص تغییر. - (اختیاری)
close(): برای پاکسازی مخزن.
پیمایش لیست را انجام دهید
برای بازیابی شناسهها و هشها، تابع getIds() را بازنویسی کنید. برای مدیریت هر آیتم در صف نمایهسازی جستجوی ابری، تابع getDoc() را بازنویسی کنید.
شناسههای آیتم و مقادیر هش را فشار دهید
برای دریافت شناسهها و هشهای محتوا، getIds() را بازنویسی کنید. آنها را در یک درخواست PushItems به صف نمایهسازی بستهبندی کنید.
از PushItems.Builder برای بستهبندی شناسهها و هشها استفاده کنید.
بازیابی و مدیریت هر مورد
برای مدیریت آیتمهای موجود در صف فهرستبندی، getDoc() را بازنویسی کنید. آیتمها میتوانند جدید، اصلاحشده، بدون تغییر یا حذفشده باشند.
- بررسی کنید که آیا شناسهی آیتم در مخزن وجود دارد یا خیر. اگر نه، آن را حذف کنید.
- وضعیت را از شاخص نظرسنجی کنید. اگر تغییر نکرده (
ACCEPTED)، هیچ کاری انجام ندهید. - فهرست کردن موارد تغییر یافته یا جدید: تنظیم مجوزها، تنظیم فراداده، ترکیب در یک
RepositoryDocو بازگرداندن آن.
رسیدگی به موارد حذف شده
این قطعه کد نشان میدهد که چگونه میتوان وجود یک آیتم را تشخیص داد و در صورت عدم وجود، آن را حذف کرد.
رسیدگی به موارد بدون تغییر
برای مدیریت موارد بدون تغییر، صف فهرستبندی را بررسی کنید.
این مثال از یک هش برای تشخیص تغییرات استفاده میکند.
تنظیم مجوزها برای یک مورد
مخازن از لیستهای کنترل دسترسی (ACL) برای شناسایی کاربران یا گروههایی که به یک مورد دسترسی دارند استفاده میکنند. یک ACL، شناسههای کاربران یا گروههای مجاز را فهرست میکند.
برای اطمینان از اینکه کاربران فقط نتایج جستجویی را که مجاز به دسترسی به آنها هستند، مشاهده میکنند، باید ACL های مخزن خود را تکثیر کنید. هنگام فهرستبندی یک مورد، ACL را نیز لحاظ کنید تا Google Cloud Search بتواند سطح دسترسی صحیح را ارائه دهد.
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) شامل کلاسها و روشهایی برای مدلسازی ACLهای اکثر مخازن است. ACLهای مخزن خود را تجزیه و تحلیل کنید و ACLهای مربوطه را برای جستجوی ابری (Cloud Search) در حین فهرستبندی ایجاد کنید. مدلسازی ACLهای پیچیده، مانند آنهایی که از وراثت استفاده میکنند، نیاز به برنامهریزی دقیق دارد. برای اطلاعات بیشتر، به ACLهای جستجوی ابری (Cloud Search ACLs) مراجعه کنید.
از کلاس Acl.Builder برای تنظیم دسترسی استفاده کنید. این قطعه کد از نمونه کامل پیمایش به همه کاربران دامنه ( getCustomerPrincipal() ) اجازه میدهد همه موارد ( setReaders() ) را بخوانند:
مدلسازی صحیح ACLهای مخزن، به ویژه آنهایی که از مدلهای وراثت استفاده میکنند، به اطلاعات موجود در ACLهای جستجوی ابری نیاز دارد.
تنظیم فراداده برای یک آیتم
ایجاد یک آیتم قابل فهرستبندی
از متد setRequestMode() از کلاس RepositoryDoc.Builder برای تنظیم درخواست ایندکسگذاری روی ASYNCHRONOUS یا SYNCHRONOUS استفاده کنید:
-
ASYNCHRONOUS - این حالت تأخیر بیشتری در اندیسگذاری تا ارائه سرویس دارد اما سهمیه توان عملیاتی بیشتری را در خود جای میدهد. از حالت ناهمزمان برای اندیسگذاری اولیه (backfill) کل مخزن استفاده کنید.
-
SYNCHRONOUS - این حالت تأخیر کمتری در اندیسگذاری تا ارائه سرویس دارد، اما سهمیه توان عملیاتی کمتری دارد. از حالت همگام برای اندیسگذاری بهروزرسانیها و تغییرات مخزن استفاده کنید. در صورت عدم تعیین، حالت درخواست به صورت پیشفرض روی
SYNCHRONOUSتنظیم میشود.
مراحل بعدی
در اینجا چند گام بعدی که میتوانید بردارید، آورده شده است:
- (اختیاری) متد
close()را برای آزادسازی هرگونه منبع قبل از خاموش شدن پیادهسازی کنید. - (اختیاری) با استفاده از کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) ، یک رابط هویت (identity connector) ایجاد کنید .
ایجاد یک رابط پیمایش گراف با استفاده از یک کلاس الگو
صف نمایهسازی جستجوی ابری، شناسهها و مقادیر هش اختیاری را برای هر مورد در مخزن نگه میدارد. یک رابط پیمایش گراف، شناسههای مورد را به صف نمایهسازی جستجوی ابری گوگل ارسال میکند و آنها را یکی یکی برای نمایهسازی بازیابی میکند. جستجوی ابری گوگل، صفها را نگهداری میکند و محتوای صف را برای تعیین وضعیت مورد، مانند اینکه آیا یک مورد از مخزن حذف شده است یا خیر، مقایسه میکند. برای اطلاعات بیشتر در مورد صف نمایهسازی جستجوی ابری، به صف نمایهسازی جستجوی ابری گوگل مراجعه کنید.
در طول اندیسگذاری، محتوای آیتم از مخزن دادهها واکشی میشود و شناسههای هر آیتم فرزند به صف اضافه میشوند. رابط به صورت بازگشتی شناسههای والد و فرزند را تا زمانی که همه آیتمها مدیریت شوند، پردازش میکند.
نقطه ورود کانکتور را پیادهسازی کنید
نقطه ورود به یک کانکتور، متد 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برای فایلهای بزرگتر از ۱۰۰ کیلوبایت. - (اختیاری)
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 برای افزودن موارد به صف استفاده کنید.
رابط محتوا یک برنامه نرمافزاری است که دادهها را در یک مخزن سازمانی پیمایش میکند و یک منبع داده را پر میکند. گوگل گزینههای زیر را برای توسعه رابطهای محتوا ارائه میدهد:
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK). این گزینه خوبی برای برنامهنویسان جاوا است. SDK یک پوشش پیرامون REST API است که به شما امکان میدهد به سرعت رابطها را ایجاد کنید. برای ایجاد یک رابط محتوا با استفاده از SDK، به بخش «ایجاد یک رابط محتوا با استفاده از SDK رابط محتوا» مراجعه کنید.
یک API سطح پایین REST یا کتابخانههای API. اگر از جاوا استفاده نمیکنید یا اگر کدبیس شما با API REST یا یک کتابخانه سازگارتر است، از این گزینهها استفاده کنید. برای ایجاد یک رابط محتوا با استفاده از REST API، به بخش ایجاد یک رابط محتوا با استفاده از REST API مراجعه کنید.
یک رابط محتوای معمولی وظایف زیر را انجام میدهد:
- پارامترهای پیکربندی را میخواند و پردازش میکند.
- تکههای گسسته از دادههای قابل فهرستبندی، به نام " آیتمها "، را از مخزن شخص ثالث دریافت میکند.
- ACLها، فرادادهها و دادههای محتوا را در آیتمهای قابل فهرستبندی ترکیب میکند.
- آیتمها را در منبع داده Cloud Search فهرستبندی میکند.
- (اختیاری) به اعلانهای تغییر از مخزن گوش میدهد. اعلانهای تغییر به درخواستهای نمایهسازی تبدیل میشوند تا منبع داده Cloud Search را همگام نگه دارند. رابط فقط در صورتی این کار را انجام میدهد که مخزن از تشخیص تغییر پشتیبانی کند.
با استفاده از کیت توسعه نرمافزاری رابط محتوا (Content Connector SDK)، یک رابط محتوا (content connector) ایجاد کنید.
بخشهای زیر نحوه ایجاد یک رابط محتوا با استفاده از کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) را توضیح میدهند.
وابستگیها را تنظیم کنید
این وابستگیها را در فایل ساخت خود لحاظ کنید.
ماون
xml <dependency> <groupId>com.google.enterprise.cloudsearch</groupId> <artifactId>google-cloudsearch-indexing-connector-sdk</artifactId> <version>v1-0.0.3</version> </dependency>
گرادل
groovy compile group: 'com.google.enterprise.cloudsearch', name: 'google-cloudsearch-indexing-connector-sdk', version: 'v1-0.0.3'
پیکربندی کانکتور خود را ایجاد کنید
هر کانکتور از یک فایل پیکربندی برای پارامترهایی مانند شناسه مخزن شما استفاده میکند. پارامترها را به صورت جفتهای کلید-مقدار تعریف کنید، مانند api.sourceId= 1234567890abcdef .
کیت توسعه نرمافزار جستجوی ابری گوگل (Google Cloud Search SDK) شامل پارامترهای ارائه شده توسط گوگل برای همه کانکتورها است. شما باید موارد زیر را در فایل پیکربندی خود اعلام کنید:
- رابط محتوا :
api.sourceIdوapi.serviceAccountPrivateKeyFileرا تعریف کنید. اینها مخزن شما و کلید خصوصی مورد نیاز برای دسترسی را مشخص میکنند.
- رابط هویت : برای شناسایی منبع هویت خارجی خود،
api.identitySourceIdرا تعریف کنید. برای همگامسازی کاربر،api.customerId(شناسه منحصر به فرد برای حساب Google Workspace شما) را نیز تعریف کنید.
پارامترهای ارائه شده توسط گوگل را فقط طوری تعریف کنید که مقادیر پیشفرض آنها لغو شود. برای جزئیات بیشتر در مورد تولید شناسهها و کلیدها، به پارامترهای ارائه شده توسط گوگل مراجعه کنید.
همچنین میتوانید پارامترهای مختص مخزن را در فایل پیکربندی خود تعریف کنید.
فایل پیکربندی را به کانکتور ارسال کنید
ویژگی سیستم 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 پس از فراخوانی Application.build() ) توسط متد main() شما، تابع initConfig() () را فراخوانی میکند. متد initConfig() به صورت زیر است:
- اطمینان حاصل میکند که
Configurationاز قبل مقداردهی اولیه نشده است. - شیء
Configurationرا با جفتهای کلید-مقدار ارائه شده توسط گوگل، مقداردهی اولیه میکند.
پیادهسازی رابط مخزن (Repository)
شیء Repository آیتمهای مخزن را پیمایش و فهرستبندی میکند. هنگام استفاده از یک الگو، فقط باید متدهای خاصی را در رابط Repository بازنویسی کنید. برای FullTraversalConnector ، بازنویسی کنید:
-
init(): برای تنظیم و مقداردهی اولیه مخزن. -
getAllDocs(): برای پیمایش و فهرستبندی همه آیتمها. این متد برای هر پیمایش زمانبندیشده یک بار فراخوانی میشود. - (اختیاری)
getChanges(): اگر مخزن شما از تشخیص تغییر پشتیبانی میکند، این را برای بازیابی و فهرستبندی موارد تغییر یافته بازنویسی کنید. - (اختیاری)
close(): برای پاکسازی مخزن در هنگام خاموش شدن سیستم.
هر متد یک شیء ApiOperation برمیگرداند که با استفاده از IndexingService.indexItem() ایندکسگذاری را انجام میدهد.
دریافت پارامترهای پیکربندی سفارشی
برای مدیریت پیکربندی کانکتور خود، باید هرگونه پارامتر سفارشی را از شیء Configuration بازیابی کنید. این کار را در متد init() کلاس Repository خود انجام دهید.
کلاس Configuration شامل متدهایی برای بازیابی انواع مختلف داده است. هر متد یک شیء ConfigValue را برمیگرداند. از متد get() شیء ConfigValue برای بازیابی مقدار استفاده کنید. این قطعه کد از FullTraversalSample نحوه بازیابی یک مقدار صحیح سفارشی را نشان میدهد:
برای بازیابی و تجزیه پارامترهایی با چندین مقدار، از یکی از تجزیهکنندههای نوع کلاس Configuration استفاده کنید. این قطعه کد از رابط آموزشی از getMultiValue برای بازیابی لیستی از نامهای مخزن GitHub استفاده میکند:
انجام پیمایش کامل
برای انجام یک پیمایش کامل، تابع getAllDocs() را نادیده میگیرد. این متد یک نقطهی بررسی میپذیرد تا در صورت قطع شدن، اندیسگذاری را از سر بگیرد. برای هر آیتم:
- مجوزها را تنظیم کنید.
- تنظیم فراداده (metadata).
- آنها را در یک
RepositoryDocترکیب کنید. - هر آیتم را در تکرارکنندهای که توسط
getAllDocs()برگردانده میشود، بستهبندی کنید.
اگر مجموعه اقلام برای یک فراخوانی خیلی بزرگ است، از یک Checkpoint استفاده کنید و تابع hasMore(true) را فراخوانی کنید.
تنظیم مجوزها برای یک مورد
مخازن از لیستهای کنترل دسترسی (ACL) برای شناسایی کاربران یا گروههایی که به یک مورد دسترسی دارند استفاده میکنند. یک ACL، شناسههای کاربران یا گروههای مجاز را فهرست میکند.
برای اطمینان از اینکه کاربران فقط نتایج جستجویی را که مجاز به دسترسی به آنها هستند، مشاهده میکنند، باید ACL های مخزن خود را تکثیر کنید. هنگام فهرستبندی یک مورد، ACL را نیز لحاظ کنید تا Google Cloud Search بتواند سطح دسترسی صحیح را ارائه دهد.
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) شامل کلاسها و روشهایی برای مدلسازی ACLهای اکثر مخازن است. ACLهای مخزن خود را تجزیه و تحلیل کنید و ACLهای مربوطه را برای جستجوی ابری (Cloud Search) در حین فهرستبندی ایجاد کنید. مدلسازی ACLهای پیچیده، مانند آنهایی که از وراثت استفاده میکنند، نیاز به برنامهریزی دقیق دارد. برای اطلاعات بیشتر، به ACLهای جستجوی ابری (Cloud Search ACLs) مراجعه کنید.
از کلاس Acl.Builder برای تنظیم دسترسی استفاده کنید. این قطعه کد از نمونه کامل پیمایش به همه کاربران دامنه ( getCustomerPrincipal() ) اجازه میدهد همه موارد ( setReaders() ) را بخوانند:
مدلسازی صحیح ACLهای مخزن، به ویژه آنهایی که از مدلهای وراثت استفاده میکنند، به اطلاعات موجود در ACLهای جستجوی ابری نیاز دارد.
تنظیم فراداده برای یک آیتم
متادیتا در یک شیء Item ذخیره میشود. برای ایجاد یک Item ، به یک شناسه منحصر به فرد، نوع آیتم، ACL، URL و نسخه نیاز دارید. از کلاس کمکی IndexingItemBuilder استفاده کنید.
ایجاد آیتم قابل فهرستبندی
از کلاس RepositoryDoc.Builder استفاده کنید.
یک RepositoryDoc یک ApiOperation است که درخواست IndexingService.indexItem() را انجام میدهد.
از متد setRequestMode() از کلاس RepositoryDoc.Builder برای تنظیم درخواست ایندکسگذاری روی ASYNCHRONOUS یا SYNCHRONOUS استفاده کنید:
-
ASYNCHRONOUS - این حالت تأخیر بیشتری در اندیسگذاری تا ارائه سرویس دارد اما سهمیه توان عملیاتی بیشتری را در خود جای میدهد. از حالت ناهمزمان برای اندیسگذاری اولیه (backfill) کل مخزن استفاده کنید.
-
SYNCHRONOUS - این حالت تأخیر کمتری در اندیسگذاری تا ارائه سرویس دارد، اما سهمیه توان عملیاتی کمتری دارد. از حالت همگام برای اندیسگذاری بهروزرسانیها و تغییرات مخزن استفاده کنید. در صورت عدم تعیین، حالت درخواست به صورت پیشفرض روی
SYNCHRONOUSتنظیم میشود.
هر آیتم قابل فهرستبندی را در یک تکرارکننده بستهبندی کنید
متد getAllDocs() یک CheckpointCloseableIterable از اشیاء RepositoryDoc برمیگرداند. از کلاس CheckpointCloseableIterableImpl.Builder استفاده کنید.
مراحل بعدی
- (اختیاری) اگر سرعت ایندکسگذاری پایین است، به افزایش نرخ ایندکسگذاری مراجعه کنید.
- (اختیاری) برای آزادسازی منابع، تابع
close()را پیادهسازی کنید. - (اختیاری) یک رابط هویت ایجاد کنید .
با استفاده از یک کلاس الگو، یک رابط پیمایش لیست ایجاد کنید
صف نمایهسازی جستجوی ابری، شناسهها و هشهای اختیاری را برای اقلام مخزن نگه میدارد. یک رابط پیمایش لیست، شناسهها را به این صف ارسال کرده و آنها را برای نمایهسازی بازیابی میکند. جستجوی ابری این صفها را برای تعیین وضعیت اقلام، مانند حذفها، نگهداری میکند. به صف نمایهسازی جستجوی ابری مراجعه کنید.
این بخش به ListTraversalSample اشاره دارد.
نقطه ورود کانکتور را پیادهسازی کنید
متد main() یک نمونه Application ایجاد میکند و start() را فراخوانی میکند. IndexingApplication.Builder برای نمونهسازی الگوی ListingConnector استفاده کنید.
پیادهسازی رابط مخزن (Repository)
متدهای زیر را برای ListingConnector بازنویسی کنید:
-
init(): برای تنظیم مخزن. -
getIds(): برای بازیابی شناسهها و هشها برای همه رکوردها. -
getDoc(): برای اضافه کردن، بهروزرسانی یا حذف آیتمها از ایندکس. - (اختیاری)
getChanges(): برای بهروزرسانیهای افزایشی با استفاده از تشخیص تغییر. - (اختیاری)
close(): برای پاکسازی مخزن.
پیمایش لیست را انجام دهید
برای بازیابی شناسهها و هشها، تابع getIds() را بازنویسی کنید. برای مدیریت هر آیتم در صف نمایهسازی جستجوی ابری، تابع getDoc() را بازنویسی کنید.
شناسههای آیتم و مقادیر هش را فشار دهید
برای دریافت شناسهها و هشهای محتوا، getIds() را بازنویسی کنید. آنها را در یک درخواست PushItems به صف نمایهسازی بستهبندی کنید.
از PushItems.Builder برای بستهبندی شناسهها و هشها استفاده کنید.
بازیابی و مدیریت هر مورد
برای مدیریت آیتمهای موجود در صف فهرستبندی، getDoc() را بازنویسی کنید. آیتمها میتوانند جدید، اصلاحشده، بدون تغییر یا حذفشده باشند.
- بررسی کنید که آیا شناسهی آیتم در مخزن وجود دارد یا خیر. اگر نه، آن را حذف کنید.
- وضعیت را از شاخص نظرسنجی کنید. اگر تغییر نکرده (
ACCEPTED)، هیچ کاری انجام ندهید. - فهرست کردن موارد تغییر یافته یا جدید: تنظیم مجوزها، تنظیم فراداده، ترکیب در یک
RepositoryDocو بازگرداندن آن.
رسیدگی به موارد حذف شده
این قطعه کد نشان میدهد که چگونه میتوان وجود یک آیتم را تشخیص داد و در صورت عدم وجود، آن را حذف کرد.
رسیدگی به موارد بدون تغییر
برای مدیریت موارد بدون تغییر، صف فهرستبندی را بررسی کنید.
این مثال از یک هش برای تشخیص تغییرات استفاده میکند.
تنظیم مجوزها برای یک مورد
مخازن از لیستهای کنترل دسترسی (ACL) برای شناسایی کاربران یا گروههایی که به یک مورد دسترسی دارند استفاده میکنند. یک ACL، شناسههای کاربران یا گروههای مجاز را فهرست میکند.
برای اطمینان از اینکه کاربران فقط نتایج جستجویی را که مجاز به دسترسی به آنها هستند، مشاهده میکنند، باید ACL های مخزن خود را تکثیر کنید. هنگام فهرستبندی یک مورد، ACL را نیز لحاظ کنید تا Google Cloud Search بتواند سطح دسترسی صحیح را ارائه دهد.
کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) شامل کلاسها و روشهایی برای مدلسازی ACLهای اکثر مخازن است. ACLهای مخزن خود را تجزیه و تحلیل کنید و ACLهای مربوطه را برای جستجوی ابری (Cloud Search) در حین فهرستبندی ایجاد کنید. مدلسازی ACLهای پیچیده، مانند آنهایی که از وراثت استفاده میکنند، نیاز به برنامهریزی دقیق دارد. برای اطلاعات بیشتر، به ACLهای جستجوی ابری (Cloud Search ACLs) مراجعه کنید.
از کلاس Acl.Builder برای تنظیم دسترسی استفاده کنید. این قطعه کد از نمونه کامل پیمایش به همه کاربران دامنه ( getCustomerPrincipal() ) اجازه میدهد همه موارد ( setReaders() ) را بخوانند:
مدلسازی صحیح ACLهای مخزن، به ویژه آنهایی که از مدلهای وراثت استفاده میکنند، به اطلاعات موجود در ACLهای جستجوی ابری نیاز دارد.
تنظیم فراداده برای یک آیتم
ایجاد یک آیتم قابل فهرستبندی
از متد setRequestMode() از کلاس RepositoryDoc.Builder برای تنظیم درخواست ایندکسگذاری روی ASYNCHRONOUS یا SYNCHRONOUS استفاده کنید:
-
ASYNCHRONOUS - این حالت تأخیر بیشتری در اندیسگذاری تا ارائه سرویس دارد اما سهمیه توان عملیاتی بیشتری را در خود جای میدهد. از حالت ناهمزمان برای اندیسگذاری اولیه (backfill) کل مخزن استفاده کنید.
-
SYNCHRONOUS - این حالت تأخیر کمتری در اندیسگذاری تا ارائه سرویس دارد، اما سهمیه توان عملیاتی کمتری دارد. از حالت همگام برای اندیسگذاری بهروزرسانیها و تغییرات مخزن استفاده کنید. در صورت عدم تعیین، حالت درخواست به صورت پیشفرض روی
SYNCHRONOUSتنظیم میشود.
مراحل بعدی
در اینجا چند گام بعدی که میتوانید بردارید، آورده شده است:
- (اختیاری) متد
close()را برای آزادسازی هرگونه منبع قبل از خاموش شدن پیادهسازی کنید. - (اختیاری) با استفاده از کیت توسعه نرمافزار رابط محتوا (Content Connector SDK) ، یک رابط هویت (identity connector) ایجاد کنید .
ایجاد یک رابط پیمایش گراف با استفاده از یک کلاس الگو
صف نمایهسازی جستجوی ابری، شناسهها و مقادیر هش اختیاری را برای هر مورد در مخزن نگه میدارد. یک رابط پیمایش گراف، شناسههای مورد را به صف نمایهسازی جستجوی ابری گوگل ارسال میکند و آنها را یکی یکی برای نمایهسازی بازیابی میکند. جستجوی ابری گوگل، صفها را نگهداری میکند و محتوای صف را برای تعیین وضعیت مورد، مانند اینکه آیا یک مورد از مخزن حذف شده است یا خیر، مقایسه میکند. برای اطلاعات بیشتر در مورد صف نمایهسازی جستجوی ابری، به صف نمایهسازی جستجوی ابری گوگل مراجعه کنید.
در طول اندیسگذاری، محتوای آیتم از مخزن دادهها واکشی میشود و شناسههای هر آیتم فرزند به صف اضافه میشوند. رابط به صورت بازگشتی شناسههای والد و فرزند را تا زمانی که همه آیتمها مدیریت شوند، پردازش میکند.
نقطه ورود کانکتور را پیادهسازی کنید
نقطه ورود به یک کانکتور، متد main() است. این متد یک نمونه از کلاس Application ایجاد میکند و متد start() آن را برای اجرای کانکتور فراخوانی میکند.
Before calling application.start() , use the IndexingApplication.Builder class to instantiate the ListingConnector template. The ListingConnector accepts a Repository object whose methods you implement.
Implement the Repository interface
Override init() , getIds() , getDoc() , and optionally getChanges() or close() .
Perform the graph traversal
Override getIds() to retrieve initial IDs and getDoc() to handle items and push child IDs to the queue.
Push item IDs and hash values
Retrieve and handle each item
- Check if the ID exists in the repository. If not, delete the item.
- For existing items, set permissions and metadata, and combine them into a
RepositoryDoc. - Push child IDs to the Indexing Queue.
- Return the
RepositoryDoc.
Handle deleted items
Set metadata and create the item
Place child IDs in the Indexing Queue
Create a content connector using the REST API
The following sections explain how to create a content connector using the REST API.
Determine your traversal strategy
The strategies (Full, List, and Graph) are conceptually the same as for the SDK. Implement your chosen strategy using the REST API.
Implement your traversal strategy and index items
Register your schema, then populate the index using:
- (Optional)
items.uploadfor files larger than 100 KiB. - (Optional)
media.uploadfor media files. items.indexto index the item.Example indexing request:
{ "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" }(Optional) Use
items.getto verify indexing.
Handle repository changes
Periodically reindex the entire repository for full indexing. For list or graph traversal, use the Google Cloud Indexing Queue to track changes and only index what has changed. Use items.push to add items to the queue.