صف های نمایه سازی Google Cloud Search

Connector SDK و Google Cloud Search API امکان ایجاد صف‌های نمایه‌سازی Cloud Search را می‌دهد که برای انجام وظایف زیر استفاده می‌شوند:

  • وضعیت هر سند (وضعیت، مقادیر هش و غیره) را حفظ کنید که می تواند برای همگام نگه داشتن فهرست شما با مخزن شما استفاده شود.

  • فهرستی از مواردی که در طول فرآیند پیمایش کشف می شوند، فهرست بندی شوند.

  • اولویت بندی اقلام در صف بر اساس وضعیت آیتم.

  • اطلاعات وضعیت اضافی را برای یکپارچه سازی کارآمد مانند پست های بازرسی، تغییر رمز و غیره حفظ کنید.

صف برچسبی است که به یک آیتم نمایه شده اختصاص داده می شود، مانند "پیش فرض" برای صف پیش فرض یا "B" برای صف B.

وضعیت و اولویت

اولویت یک سند در یک صف بر اساس کد ItemStatus آن است. کدهای ItemStatus احتمالی به ترتیب اولویت در زیر آمده است (اول تا آخر رسیدگی می شود):

  • ERROR - مورد در طول فرآیند نمایه سازی با خطای ناهمزمان مواجه شد و باید دوباره نمایه شود.

  • MODIFIED - موردی که قبلا ایندکس شده بود و از زمان آخرین نمایه سازی در مخزن اصلاح شده است.

  • NEW_ITEM - موردی که نمایه نشده است.

  • ACCEPTED - سندی که قبلاً نمایه شده است و از آخرین نمایه سازی در مخزن تغییر نکرده است.

هنگامی که دو آیتم در یک صف دارای وضعیت یکسانی باشند، اولویت بیشتری به مواردی داده می شود که برای طولانی ترین مدت در صف بوده اند.

مروری بر استفاده از صف های نمایه سازی برای نمایه سازی یک آیتم جدید یا تغییر یافته

شکل 1 مراحل نمایه سازی یک آیتم جدید یا تغییر یافته را با استفاده از یک صف نمایه سازی نشان می دهد. این مراحل تماس های REST API را نشان می دهد. برای تماس‌های SDK معادل، به عملیات صف (کانکتور SDK) مراجعه کنید.

مروری بر نمایه سازی Google Cloud Search
شکل 1. مراحل نمایه سازی برای افزودن یا به روز رسانی یک مورد
  1. رابط محتوا از items.push برای فشار دادن موارد (فراداده و هش) به صف فهرست‌سازی استفاده می‌کند تا وضعیت مورد را مشخص کند ( MODIFIED ، NEW_ITEM ، DELETED ). به طور مشخص:

    • هنگام فشار دادن، رابط به صراحت شامل یک type فشار یا contentHash است.
    • اگر رابط شامل type نباشد، Cloud Search به طور خودکار از contentHash برای تعیین وضعیت مورد استفاده می کند.
    • اگر مورد ناشناخته باشد، وضعیت مورد روی NEW_ITEM تنظیم می شود.
    • اگر مورد وجود داشته باشد و مقادیر هش مطابقت داشته باشد، وضعیت به عنوان ACCEPTED حفظ می شود.
    • اگر مورد وجود داشته باشد و هش ها متفاوت باشد، وضعیت MODIFIED است.

    برای کسب اطلاعات بیشتر در مورد چگونگی تعیین وضعیت آیتم، به کد نمونه کد مخازن GitHub در آموزش شروع جستجوی Cloud مراجعه کنید.

    معمولاً، فشار با پیمایش محتوا و/یا فرآیندهای تشخیص تغییر در کانکتور مرتبط است.

  2. رابط محتوا از items.poll برای نظرسنجی صف برای تعیین موارد برای فهرست استفاده می کند. Cloud Search به رابط می‌گوید کدام موارد بیشتر به فهرست‌بندی نیاز دارند، ابتدا بر اساس کد وضعیت و سپس بر اساس زمان در صف مرتب‌سازی شده‌اند.

  3. کانکتور این موارد را از مخزن بازیابی می کند و درخواست های API شاخص را ایجاد می کند.

  4. رابط از items.index برای نمایه سازی آیتم ها استفاده می کند. مورد فقط پس از اینکه Cloud Search با موفقیت پردازش مورد را به پایان رساند، وارد وضعیت ACCEPTED می شود.

یک رابط همچنین می‌تواند یک مورد را در صورتی که دیگر در مخزن وجود نداشته باشد حذف کند، یا اگر موردی را تغییر نداده یا اگر یک خطای مخزن منبع وجود داشته باشد، دوباره آن را فشار دهد. برای اطلاعات در مورد حذف موارد، بخش بعدی را ببینید.

مروری بر استفاده از صف های نمایه سازی برای حذف یک مورد

استراتژی پیمایش کامل از یک فرآیند دو صف برای فهرست بندی اقلام و شناسایی حذف ها استفاده می کند. شکل 2 مراحل حذف یک آیتم را با استفاده از دو صف نمایه سازی نشان می دهد. به طور خاص، شکل 2 پیمایش دوم را نشان می دهد که با استفاده از یک استراتژی پیمایش کامل انجام شده است. این مراحل از تماس‌های REST API استفاده می‌کنند. برای تماس‌های SDK معادل، به عملیات صف (کانکتور SDK) مراجعه کنید.

مروری بر نمایه سازی Google Cloud Search
شکل 2. حذف موارد
  1. در پیمایش اولیه، رابط محتوا از items.push استفاده می‌کند تا آیتم‌ها (فراداده و هش) را به یک صف نمایه‌سازی فشار دهد، «صف A» به عنوان NEW_ITEM چون در صف وجود ندارد. به هر مورد برچسب "A" برای "صف A" اختصاص داده شده است. محتوا در جستجوی ابری نمایه می شود.

  2. رابط محتوا از items.poll برای نظرسنجی صف A برای تعیین آیتم‌ها برای فهرست‌بندی استفاده می‌کند. Cloud Search به رابط می‌گوید کدام موارد بیشتر به فهرست‌بندی نیاز دارند، ابتدا بر اساس کد وضعیت و سپس بر اساس زمان در صف مرتب‌سازی شده‌اند.

  3. کانکتور این موارد را از مخزن بازیابی می کند و درخواست های API شاخص را ایجاد می کند.

  4. رابط از items.index برای نمایه سازی آیتم ها استفاده می کند. مورد فقط پس از اینکه Cloud Search با موفقیت پردازش مورد را به پایان رساند، وارد وضعیت ACCEPTED می شود.

  5. متد deleteQueueItems در "صف B" فراخوانی می شود. اما، هیچ موردی به صف B فشار داده نشده است، بنابراین هیچ چیزی نمی تواند حذف شود.

  6. در دومین پیمایش کامل، رابط محتوا از items.push استفاده می‌کند تا آیتم‌ها (فراداده و هش) را در صف B قرار دهد:

    • هنگام فشار دادن، رابط به صراحت شامل یک type فشار یا contentHash است.
    • اگر رابط شامل type نباشد، Cloud Search به طور خودکار از contentHash برای تعیین وضعیت مورد استفاده می کند.
    • اگر مورد ناشناخته باشد، وضعیت مورد روی NEW_ITEM تنظیم می شود و برچسب صف به "B" تغییر می کند.
    • اگر مورد وجود داشته باشد و مقادیر هش مطابقت داشته باشد، وضعیت به عنوان ACCEPTED حفظ می شود و برچسب صف به "B" تغییر می کند.
    • اگر مورد وجود داشته باشد و هش ها متفاوت باشد، وضعیت MODIFIED می شود و برچسب صف به "B" تغییر می کند.
  7. رابط محتوا از items.poll برای نظرسنجی صف برای تعیین موارد برای فهرست استفاده می کند. Cloud Search به رابط می‌گوید کدام موارد بیشتر به فهرست‌بندی نیاز دارند، ابتدا بر اساس کد وضعیت و سپس بر اساس زمان در صف مرتب‌سازی شده‌اند.

  8. کانکتور این موارد را از مخزن بازیابی می کند و درخواست های API شاخص را ایجاد می کند.

  9. رابط از items.index برای نمایه سازی آیتم ها استفاده می کند. مورد فقط پس از اینکه Cloud Search با موفقیت پردازش مورد را به پایان رساند، وارد وضعیت ACCEPTED می شود.

  10. در نهایت، deleteQueueItems در صف A فراخوانی می‌شود تا تمام موارد CCloud Search که قبلاً فهرست‌بندی شده‌اند و همچنان دارای برچسب «A» در صف هستند، حذف شود.

  11. با پیمایش کامل بعدی، صف مورد استفاده برای نمایه سازی و صف مورد استفاده برای حذف تعویض می شوند.

عملیات صف (کانکتور SDK)

Content Connector SDK عملیاتی را برای فشار دادن آیتم ها به صف و کشیدن آیتم ها از آن ارائه می کند.

برای بسته بندی و فشار دادن یک آیتم به صف، از کلاس سازنده pushItems استفاده کنید.

برای بیرون کشیدن اقلام از صف برای پردازش، نیازی به انجام کار خاصی ندارید. در عوض، SDK به‌طور خودکار آیتم‌ها را به ترتیب اولویت، با استفاده از متد getDoc کلاس Repository از صف بیرون می‌کشد.

عملیات صف (REST API)

REST API دو روش زیر را برای فشار دادن آیتم ها به یک صف و بیرون کشیدن آیتم ها از صف ارائه می دهد:

  • برای فشار دادن یک مورد به صف، از Items.push استفاده کنید.
  • برای نظرسنجی موارد در صف، از Items.poll استفاده کنید.

همچنین می توانید از Items.index برای فشار دادن آیتم ها به صف در طول نمایه سازی استفاده کنید. مواردی که در طول نمایه سازی به صف فشار داده می شوند نیازی به type ندارند و به طور خودکار وضعیت ACCEPTED به آنها اختصاص داده می شود.

Items.push

متد Items.push شناسه ها را به صف اضافه می کند. این روش را می توان با یک type خاص فراخوانی کرد که نتیجه عملیات فشار را تعیین می کند. برای لیستی از مقادیر type ، به فیلد item.type در روش Items.push مراجعه کنید.

با فشار دادن یک شناسه جدید، یک ورودی جدید با کد NEW_ITEM ItemStatus اضافه می‌شود.

محموله اختیاری همیشه ذخیره می شود، به عنوان یک مقدار مات در نظر گرفته می شود و از Items.poll بازگردانده می شود.

هنگامی که یک مورد نظرسنجی می شود، رزرو می شود به این معنی که نمی توان آن را با تماس دیگری به Items.poll برگرداند. استفاده از Items.push با type NOT_MODIFIED ، REPOSITORY_ERROR ، یا REQUEUE ، ورودی های نظرسنجی را لغو می کند . برای اطلاعات بیشتر در مورد ورودی های رزرو شده و رزرو نشده، به بخش Items.poll مراجعه کنید.

Items.push با هش

Google Cloud Search API از تعیین مقادیر متادیتا و هش محتوا در درخواست‌های Items.index پشتیبانی می‌کند. به جای مشخص کردن type ، می توان مقادیر متادیتا و/یا هش محتوا را با یک درخواست فشار مشخص کرد. صف فهرست بندی Cloud Search مقادیر هش ارائه شده را با مقادیر ذخیره شده موجود با مورد در منبع داده مقایسه می کند. در صورت عدم تطابق، آن ورودی به عنوان MODIFIED علامت گذاری می شود. اگر مورد مربوطه در فهرست وجود نداشته باشد، وضعیت NEW_ITEM است.

Items.poll

متد Items.poll ورودی های با بالاترین اولویت را از صف بازیابی می کند. مقادیر وضعیت درخواستی و برگشتی نشان دهنده وضعیت(های) صف(های) اولویت درخواستی یا وضعیت شناسه های برگشتی است.

به طور پیش فرض، ورودی های هر بخش از صف ممکن است بر اساس اولویت بازگردانده شوند. هر ورودی برگشتی رزرو شده است و تا زمانی که یکی از موارد زیر برآورده نشود، با تماس های دیگر به Items.poll بازگردانده نمی شود:

  • زمان رزرو به پایان می رسد.
  • ورودی دوباره توسط Items.index در صف قرار می گیرد.
  • Items.push با مقدار type NOT_MODIFIED ، REPOSITORY_ERROR یا REQUEUE فراخوانی می شود.