فهرسة ملفات R2 بلا امتداد: ماذا يغيّر تحديث Cloudflare AI Search؟

يشرح هذا الدليل كيف يفهرس Cloudflare AI Search ملفات R2 بلا امتداد عبر Content-Type الصحيح، وما يبقى من تدقيق البيانات الوصفية والمزامنة والتحقق.

Saturday, September 12, 2026Omid Saffari
فهرسة ملفات R2 بلا امتداد: ماذا يغيّر تحديث Cloudflare AI Search؟

أزال Cloudflare AI Search في 11 سبتمبر 2026 عقبة كانت تعترض فهرسة ملفات R2 بسبب اسم الملف. فإذا كانت مستنداتك محفوظة تحت مفاتيح ثابتة بلا امتداد، بات بإمكانك الإبقاء على تلك المفاتيح وجعل الكائنات قابلة للبحث، شرط تخزين قيمة HTTP Content-Type مدعومة مع كل كائن.

وبذلك يمكن الاستغناء عن مرحلة إعادة التسمية في مسار إدخال المحتوى. لكن هذا لا يلغي تنظيف البيانات الوصفية، ولا الفهرسة، ولا الاختبار الذي يثبت أن المستند دخل نتائج البحث فعلًا.

ما الذي تغيّر فعليًا؟

Cloudflare AI Search خدمة بحث مُدارة مخصصة للمحتوى الذي تملكه. ويمكن تزويدها بالمحتوى عبر حاوية R2، وهي خدمة تخزين الكائنات من Cloudflare. يقرأ AI Search محتوى الحاوية، ويحوّل المستندات المدعومة إلى نص قابل للبحث، ثم ينشئ الفهرس الذي يستخدمه تطبيقك عند إرسال استعلام.

قبل هذا التحديث، كان المسار الآمن لاكتشاف نوع الملف يعتمد على امتداد اسمه. فالمفتاح manual.pdf يوضح للمفهرس نوع الملف، بينما لا يكشف المفتاح الثابت documents/manual-alpha ذلك.

أصبح بإمكان AI Search الآن الاعتماد على قيمة HTTP Content-Type المعتادة للكائن الذي لا يحمل امتدادًا. فالقيمة application/pdf تعني أن البايتات تمثل ملف PDF، والقيمة text/markdown تعني أنها بصيغة Markdown. وتدرج Cloudflare أيضًا text/plain وapplication/json وtext/html وtext/csv ضمن الأنواع المدعومة.

هذا لا يعني اختفاء امتدادات الملفات. فما زالت Cloudflare تعدّ الامتداد المعروف المسار المفضل والأسرع لاكتشاف النوع. وتظهر فائدة المسار الجديد حين تؤدي إعادة تسمية المفتاح إلى كسر عناوين URL، أو مراجع قواعد البيانات، أو ربط المستأجرين، أو التوقيعات، أو عقد رفع قائم لديك بالفعل.

وهنا يلزم التمييز بدقة: Content-Type بيانات HTTP وصفية محفوظة على كائن R2، وليست البيانات الوصفية المخصصة التي يستخدمها AI Search للتصفية حسب الفئة أو العميل أو حالة المستند. تنتقل هذه الحقول المخصصة داخل ترويسات x-amz-meta-*، وتتطلب مخططًا في AI Search. وإضافة x-amz-meta-content-type لا تغني عن حقل HTTP الحقيقي.

يمس هذا التحديث مرحلة إدخال المصدر، أي النقطة التي يدخل عندها المستند إلى الفهرس. ولا يغيّر النموذج الذي يصوغ الإجابة بعد استرجاع المحتوى. أما تحديث GLM-5.3 Flash فيقع في مرحلة التوليد اللاحقة.

الأثر العملي: نظام تسمية أقل

شيوع المفاتيح المبهمة له أسبابه. فقد يستخدم المنتج معرّفًا ثابتًا من قاعدة البيانات كمفتاح R2 كي يتغير الكائن من دون أن يتغير عنوانه. وقد تتجنب خدمة مستندات كشف اسم الملف الأصلي للعميل. كذلك قد يعتمد عنوان URL موقّع على المفتاح نفسه حرفيًا.

كان الحل الالتفافي السابق يتمثل في إنشاء اسم ذي امتداد لنسخة البحث، أو إضافة مرحلة إعادة تسمية قبل أن يرى AI Search الكائن. وهذا ينشئ هوية إضافية يجب تخزينها ومطابقتها وتنظيفها.

يتيح التحديث إبقاء المفتاح الأصلي في مكانه متى كانت بيانات HTTP الوصفية صحيحة أصلًا. وهذا هو الاختصار المفيد في سير العمل.

فيما يلي تقدير للعمل قبل التحديث وبعده. إنه نموذج للعملية، وليس قياس أداء فعليًا ولا وفرًا مضمونًا.

الحالةالعمل قبل هذا الإصدارالعمل الآنالعمل المتبقي
رفع جديد بلا امتدادكتابة الكائن، وإنشاء اسم ذي امتداد لنسخة البحث، والفهرسة، والتحققكتابة الكائن مع Content-Type مدعوم، ثم الفهرسة والتحققالتحقق من النوع ومن النتيجة
كائن موجود ببيانات HTTP وصفية صحيحةإنشاء اسم البحث أو صيانته، ثم الفهرسة والتحققإبقاء المفتاح، والمزامنة، والتحققالمزامنة والتحقق
كائن موجود ببيانات HTTP وصفية خاطئة أو مفقودةتجاوز غياب النوع بإعادة التسمية، ثم الفهرسة والتحققالتدقيق، وإصلاح البيانات الوصفية، والمزامنة، والتحققعملية إصلاح والتحقق
نموذج معماري يوضح انتقال كائن R2 بلا امتداد عبر التحقق من Content-Type إلى فهرس AI Search مع بقاء مفتاح الكائن ثابتًا
يمكن أن يبقى المفتاح ثابتًا. تصبح قيمة HTTP Content-Type المدعومة إشارة إلى نوع الملف، لكن لا يزال على الكائن أن يخضع للمزامنة والتحقق.

لا يتضمن الجدول عمدًا أي ادعاء عن وفر مالي. فلم تنشر Cloudflare مقدارًا زمنيًا يوفره هذا التحديث، كما أن الإصدار لا يعيد كتابة البيانات الوصفية الموجودة نيابة عنك.

ما تكلفة العمل المتبقي؟

يتاح AI Search مجانًا خلال مرحلته التجريبية المفتوحة ضمن حدود خطة Workers التي تستخدمها. ويشمل ذلك التخزين والفهرسة المتجهية. وقد تظل رسوم Workers AI وAI Gateway منفصلة، لكن تغيير الإدخال هذا لا يعدّل أسعارها.

قد ينعكس إصلاح البيانات الوصفية على فاتورة R2. فعمليات ListObjects وPutObject وCopyObject تُحسب ضمن عمليات Class A. أما HeadObject وGetObject، اللتان قد تستخدمهما أداة الإصلاح لفحص كائن أو قراءته، فتُحسبان ضمن عمليات Class B.

في فئة التخزين Standard، تبلغ تكلفة طلبات Class A مقدار $4.50 لكل مليون طلب بعد الحصة الشهرية المجانية البالغة 1 مليون. أما Infrequent Access فلا تقدم حصة مجانية، وتبلغ تكلفة طلبات Class A فيها $9.00 لكل مليون. وقد تُفرض أيضًا تكلفة $0.01 لكل GB عند قراءة الكائنات أو نسخها.

ومن هنا تأتي قاعدة الميزانية الواضحة: الكائن الذي يحمل Content-Type صحيحًا لا يحتاج إلى إصلاح خاص بإعادة التسمية. أما الكائن ذو القيمة الخاطئة فقد يظل بحاجة إلى عملية كتابة أو نسخ، بحسب الأداة المستخدمة. احسب هذه العمليات قبل جدولة تنظيف يشمل الحاوية كلها.

ويهم الحجم أيضًا في AI Search. الحد لكل مثيل هو 100,000 ملف ضمن Workers Free. وتسمح Workers Paid بـ1 مليون ملف، أو 500,000 ملف عند تفعيل البحث الهجين. ويبقى حد الملف البالغ 4 MB كما هو في الخطتين.

من يمكنه الاستفادة من ذلك غدًا؟

مؤسس SaaS مستقل يستخدم معرّفات رفع ثابتة

احتفظ بمفتاح R2 المخزن أصلًا في قاعدة بياناتك، واجعل أداة الرفع ترفق نوع MIME الحقيقي عند كتابة الكائن. عندئذ يستطيع بحث الدعم لديك إدخال الكائن نفسه من دون عمود ثانٍ لأسماء الملفات، ومن دون مهمة دفعية تنشئ نسخًا مخصصة للبحث.

تتمثل الفائدة في تقليل الهويات التي ينبغي مطابقتها عندما يستبدل العميل مستندًا أو يحذفه أو ينقله. ومع ذلك، يجب أن ترفض عملية الرفع النوع الثنائي العام إذا كان يفترض أن يصبح الكائن قابلًا للبحث.

مهندس منصات يدير حاوية قديمة

اعرض الكائنات التي بلا امتداد مع بيانات HTTP الوصفية، وقارن كل قيمة بأنواع MIME التي تدعمها Cloudflare، ثم اعزل الحالات الفاشلة. أصلح عينة صغيرة قبل التعامل مع الحاوية كلها.

الفائدة هنا هي هجرة محدودة النطاق. فلا تنفق ميزانية الإصلاح إلا على الكائنات التي تحتاج إليه، بينما تنتقل المفاتيح ذات البيانات الوصفية الصحيحة مباشرة إلى المزامنة والتحقق.

فريق منتج متعدد المستأجرين

أبقِ مفاتيح الكائنات مبهمة كي لا تكشف أسماء الملفات الأصلية، واضبط Content-Type استنادًا إلى فحص موثوق على الخادم أثناء الرفع. وطبّق مرشحات المسارات أو البادئات في AI Search على نحو مستقل عندما يحتاج كل مستأجر إلى نطاق فهرسة خاص به.

الفائدة هي اتساق البنية. تظل هوية التخزين مستقلة عن طريقة عرض الملف، بينما يحصل المفهرس على نوع يمكنه التحقق منه.

وكالة تدير قواعد معرفة لعملائها

افصل بين وظيفتي البيانات الوصفية في دليل التشغيل. تحدد قيمة HTTP Content-Type ما إذا كان يمكن إدخال ملف بلا امتداد. أما حقول x-amz-meta-* المخصصة فتحدد كيفية تصفية النتائج المفهرسة بعد تعريف مخططها.

الفائدة هي تشخيص أوضح. فعندما يغيب مستند، يفحص الفريق بيانات الإدخال الوصفية قبل تغيير قواعد التصفية أو نموذج الإجابة.

كيف تبدأ فهرسة ملفات R2 بلا امتداد عبر المسار المدعوم؟

تقبل واجهة R2 Workers API ترويسات الطلب بصيغة httpMetadata. يحافظ Worker التالي على مسار الطلب بوصفه مفتاح الكائن، ويرفض عمليات الرفع التي تصل من دون Content-Type.

اربط حاوية R2 باسم DOCS في wrangler.jsonc:

Jsonc
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "r2-document-upload",
  "main": "src/index.ts",
  "compatibility_date": "2026-09-11",
  "r2_buckets": [
    {
      "binding": "DOCS",
      "bucket_name": "your-bucket"
    }
  ]
}

ثم استخدم Worker التالي:

TypeScript
interface Env {
  DOCS: R2Bucket;
}

export default {
  async fetch(request, env): Promise<Response> {
    if (request.method !== "PUT") {
      return new Response("Method Not Allowed", { status: 405 });
    }

    const key = new URL(request.url).pathname.replace(/^\//, "");
    const contentType = request.headers.get("content-type");

    if (!key || !contentType) {
      return new Response("Key and Content-Type are required");
    }

    await env.DOCS.put(key, request.body, {
      httpMetadata: request.headers,
    });

    return new Response(`Stored ${key}`);
  },
} satisfies ExportedHandler<Env>;

شغّل npx wrangler dev، واضبط WORKER_URL على العنوان المحلي الذي يعرضه Wrangler، ثم ارفع ملف PDF محليًا إلى وجهة بلا امتداد:

Bash
curl "$WORKER_URL/documents/manual-alpha" \
  --request PUT \
  --header "Content-Type: application/pdf" \
  --data-binary @manual.pdf

يثبت هذا المثال جانب التخزين، لكنه لا يثبت حدوث الفهرسة. وفي بيئة الإنتاج، أضف آلية مصادقة، واستنتج النوع عبر فحص موثوق بدل الاعتماد على اسم الملف الذي يقدمه المستخدم وحده، ثم قارنه بقائمة Cloudflare المدعومة.

بصراحة: نجاح الرفع لا يعني أن الملف أصبح قابلًا للبحث

تتسم عمليات الكتابة في R2 بالاتساق القوي، لذلك يظهر الكائن وبياناته الوصفية بعد نجاح الكتابة. أما الفهرسة في AI Search فهي مهمة غير متزامنة منفصلة؛ فقد يُقبل طلب المزامنة ثم يفشل العنصر لاحقًا.

تتزامن المثيلات المعتمدة على R2 كل 6 ساعات افتراضيًا. ويمكن اختيار فاصل زمني قدره 1 أو 2 أو 4 أو 6 أو 12 أو 24 ساعة، أو بدء مهمة بنفسك:

Bash
npx wrangler ai-search jobs create <INSTANCE_NAME>

يمكن تشغيل المزامنة اليدوية للمصدر مرة واحدة كل 30 ثانية كحد أقصى. وتكرار المحاولة لا يصلح البيانات الوصفية الخاطئة.

افحص سجلات العناصر أو تفاصيلها أو إحصاءات المثيل بعد انتهاء المهمة. ويشير الخطأ unsupported_type على مستوى العنصر إلى عجز AI Search عن قبول نوع الملف المكتشف. أصلح الكائن، ثم أعد مزامنة ذلك العنصر أو المصدر.

لن يؤثر فيك هذا التغيير إذا كان كل مفتاح R2 يحمل امتدادًا معروفًا أصلًا. ولن يؤثر فيك أيضًا إذا كان مصدر AI Search موقعًا إلكترونيًا أو مساحة تخزين مدمجة، وليس حاوية R2 خارجية. كما أن التحديث لا يجعل صيغة غير مدعومة أو ملفًا يتجاوز الحد الأقصى قابلًا للفهرسة.

ما العمل يوم الاثنين؟

ابدأ بالتدقيق، لا بإعادة كتابة شاملة.

  1. اعثر على الكائنات المتخطاة التي بلا امتداد

    اعرض كائنات R2 مع تضمين httpMetadata، وواصل التنقل بين الصفحات حتى تصبح truncated بقيمة false، ثم اعزل المفاتيح التي لا يحمل آخر جزء من مسارها امتدادًا. طابق هذه المفاتيح مع سجلات عناصر AI Search وحالات فشل unsupported_type.

  2. صنّف البيانات الوصفية

    افصل أنواع MIME المدعومة عن القيم المفقودة أو المشوهة أو غير المدعومة وعن application/octet-stream. ولا تُدخل حقول x-amz-meta-* المخصصة في هذا الفحص، لأنها تعالج مشكلة مختلفة.

  3. أصلح دفعة استيراد صغيرة

    اختر مجموعة صغيرة تمثل الصيغ التي تخزنها فعلًا. اكتب كل كائن أو انسخه مع قيمة HTTP Content-Type الصحيحة، مع إبقاء المفتاح الأصلي حيثما تتيح أداتك ذلك.

  4. زامن وتحقق من الاسترجاع

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

  5. وسّع النطاق بعد الإثبات فقط

    قدّر عدد عمليات Class A وClass B التي ستنشئها طريقة الإصلاح، وتحقق من فئة تخزين R2، ثم وسّع الدفعة. وحدّث أداة الرفع في الوقت نفسه كي تصل الكائنات الجديدة التي بلا امتداد ببيانات وصفية مدعومة.

تحرك هذا الأسبوع إذا كانت مفاتيح R2 الثابتة أو المبهمة قد أجبرتك على صيانة مسار تسمية ثانٍ من أجل AI Search. وانتظر إذا كانت الكائنات الموجودة تفتقر إلى معلومات موثوقة عن النوع، لأنك تحتاج إلى خطة تصنيف قبل إعادة الكتابة. ولا تفعل شيئًا إذا كانت الامتدادات المعروفة تدير مسار الإدخال لديك من دون مشكلة.

إذا أردت تحويل التغيير التالي في المنصة إلى قرار تشغيلي واضح، انضم إلى النشرة البريدية.

آخر تحديث
12 سبتمبر 2026
التصنيف
Explained

فضّل هذا الموقع في Google

إضافة omidsaffari.com كمصدر مفضّل في بحث Google

اجعل omidsaffari.com مصدرًا مفضّلًا، وسيرفعه Google لك في Top Stories وAI Overviews وAI Mode.

مقالات ذات صلة
تحويل الصوت إلى نص مع Grok Voice Transcribe 2.0: السعر ثابت والترحيل يحتاج اختباراً

تحويل الصوت إلى نص مع Grok Voice Transcribe 2.0: السعر ثابت والترحيل يحتاج اختباراً

يحافظ Grok Voice Transcribe 2.0 على سعر $0.10 للدفعات و$0.20 للبث، لكن تغيّر النموذج الافتراضي قد يبدّل النص وسير العمل. هذه خطة لاختبار الترحيل بأمان.20 سبتمبر 2026Explained
تصحيح أخطاء Cloudflare Browser Run قبل تشغيل المهمة مجددًا

تصحيح أخطاء Cloudflare Browser Run قبل تشغيل المهمة مجددًا

تضيف Cloudflare إلى تسجيلات Browser Run لوحة Inspect لقراءة سجلات وحدة التحكم وطلبات الشبكة وDOM، كي تشخّص فشل المهمة قبل تكبّد تكلفة تشغيل جديد.19 سبتمبر 2026Explained
حزم npm خاصة في v0: كيف تعيد استخدام مكتبة مكوناتك

حزم npm خاصة في v0: كيف تعيد استخدام مكتبة مكوناتك

أصبح v0 قادراً على تثبيت حزم npm خاصة بأمان. تعرّف إلى إعداد NPM_TOKEN وNPM_RC، وما الذي يتغير فعلاً عند تسليم النموذج الأولي إلى كود الإنتاج.19 سبتمبر 2026Explained
تكلفة Claude Code بعد 2.1.278: متى تختفي رسوم مصنّف الوضع التلقائي؟

تكلفة Claude Code بعد 2.1.278: متى تختفي رسوم مصنّف الوضع التلقائي؟

دليل عملي يوضح كيف يغيّر تحديث 2.1.278 تكلفة Claude Code، ومتى تختفي رسوم المصنّف، وكيف تكشف البوابة أو المنطقة مسار الفوترة الفعلي للجلسة بوضوح.19 سبتمبر 2026Explained
تكلفة بناء Vercel: فعّل Turbo لنشر واحد عند الحاجة

تكلفة بناء Vercel: فعّل Turbo لنشر واحد عند الحاجة

أتاحت Vercel تشغيل Turbo لعملية نشر واحدة من دون تغيير إعداد المشروع. تعرّف إلى تكلفة بناء Vercel، وطرق التفعيل الثلاث، وكيف تقيس الوقت الذي توفره.18 سبتمبر 2026Explained
ChatGPT Word: اكتب وراجع من دون مغادرة المستند

ChatGPT Word: اكتب وراجع من دون مغادرة المستند

يتيح ChatGPT Word إعداد المسودات وتلخيص المستند ومراجعة النص المحدد من داخل Word. تعرّف إلى شروط الوصول وحدود الاستخدام وسير عمل عملي يحمي الحقائق.18 سبتمبر 2026Explained
ترحيل Antigravity قبل 5 أكتوبر: دليل الوظائف المحلية

ترحيل Antigravity قبل 5 أكتوبر: دليل الوظائف المحلية

دليل عملي لترحيل وظائف Antigravity المحلية قبل 5 أكتوبر، يشرح معرّف الوكيل الجديد وتغييرات محوّل الأدوات والاختبارات اللازمة لتفادي توقف التشغيل.18 سبتمبر 2026Explained
تتبع Cloudflare Workers يكشف استدعاء RPC البطيء

تتبع Cloudflare Workers يكشف استدعاء RPC البطيء

يمتد تتبع Cloudflare Workers الآن عبر استدعاءات JavaScript RPC إلى Workers وDurable Objects، ليحدد الخدمة والدالة اللتين أخّرتا طلب العميل من دون SDK إضافي.17 سبتمبر 2026Explained
النشرة البريدية

رسالة واحدة، كل يوم أحد.أنظمة تعمل، لا آراء ساخنة.

أسبوعية. بلا إزعاج. يمكنك إلغاء الاشتراك متى شئت.