تحديث فهرس أو إعادة إنشائه في Azure الذكاء الاصطناعي Search

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

أثناء التطوير النشط، من الشائع إسقاط الفهارس وإعادة إنشائها عند تكرار تصميم الفهرس. يعمل معظم المطورين مع عينة تمثيلية صغيرة من بياناتهم بحيث تتم إعادة الإصدار بشكل أسرع.

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

تحديث المحتوى

تعد الفهرسة المتزايدة ومزامنة الفهرس مقابل التغييرات في بيانات المصدر أمرا أساسيا لمعظم تطبيقات البحث. يشرح هذا القسم سير العمل لتحديث محتويات الحقل في فهرس بحث.

  1. استخدم نفس التقنيات لتحميل المستندات: المستندات - الفهرس (REST) أو واجهة برمجة تطبيقات مكافئة في Azure SDKs. لمزيد من المعلومات حول تقنيات الفهرسة، راجع تحميل المستندات.

  2. تعيين المعلمة @search.action لتحديد التأثير على المستندات الموجودة:

    الإجراء التأثير
    delete إزالة المستند بأكمله من الفهرس. إذا كنت تريد إزالة حقل فردي، فاستخدم الدمج بدلا من ذلك، مع تعيين الحقل المعني إلى فارغ. لا تحرر المستندات والحقول المحذوفة مساحة في الفهرس على الفور. كل بضع دقائق، تقوم عملية الخلفية بإجراء الحذف الفعلي. سواء كنت تستخدم المدخل أو واجهة برمجة التطبيقات لإرجاع إحصائيات الفهرس، يمكنك توقع تأخير صغير قبل أن ينعكس الحذف في المدخل ومن خلال واجهات برمجة التطبيقات.
    merge يحدث مستندا موجودا بالفعل، ويفشل في العثور على مستند لا يمكن العثور عليه. يحل الدمج محل القيم الموجودة. لهذا السبب، تأكد من التحقق من حقول المجموعة التي تحتوي على قيم متعددة، مثل الحقول من النوع Collection(Edm.String). على سبيل المثال، إذا tags بدأ حقل بقيمة ["budget"] وقمت بتنفيذ دمج باستخدام ["economy", "pool"]، فإن القيمة النهائية للحقل tags هي ["economy", "pool"]. لن يكون ["budget", "economy", "pool"].
    mergeOrUpload يتصرف مثل الدمج إذا كان المستند موجودا، وتحميله إذا كان المستند جديدا. هذا هو الإجراء الأكثر شيوعا للتحديثات المتزايدة.
    upload على غرار "upsert" حيث يتم إدراج المستند إذا كان جديدا، ويتم تحديثه أو استبداله إذا كان موجودا. إذا كان المستند يفتقد القيم التي يتطلبها الفهرس، يتم تعيين قيمة حقل المستند إلى قيمة فارغة.
  3. انشر التحديث.

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

تلميحات للفهرسة التزايدية

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

  • إذا كنت تجري مكالمات فهرسة مباشرة، فاستخدم mergeOrUpload كإجراء بحث.

  • يجب أن تتضمن الحمولة مفاتيح أو معرفات كل مستند تريد إضافته أو تحديثه أو حذفه.

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

  • لدمج التغييرات المضمنة في مجموعة السلاسل، قم بتوفير القيمة بأكملها. tags استدعاء مثال الحقل من القسم السابق. تقوم القيم الجديدة بالكتابة فوق القيم القديمة لحقل بأكمله، ولا يوجد دمج ضمن محتوى حقل.

فيما يلي مثال واجهة برمجة تطبيقات REST يوضح هذه التلميحات:

### Get Secret Point Hotel by ID
GET  {{baseUrl}}/indexes/hotels-vector-quickstart/docs('1')?api-version=2023-11-01  HTTP/1.1
    Content-Type: application/json
    api-key: {{apiKey}}

### Change the description, city, and tags for Secret Point Hotel
POST {{baseUrl}}/indexes/hotels-vector-quickstart/docs/search.index?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "value": [
            {
            "@search.action": "mergeOrUpload",
            "HotelId": "1",
            "Description": "I'm overwriting the description for Secret Point Hotel.",
            "Tags": ["my old item", "my new item"],
            "Address": {
                "City": "Gotham City"
                }
            }
        ]
    }
       
### Retrieve the same document, confirm the overwrites and retention of all other values
GET  {{baseUrl}}/indexes/hotels-vector-quickstart/docs('1')?api-version=2023-11-01  HTTP/1.1
    Content-Type: application/json
    api-key: {{apiKey}}

تغيير مخطط الفهرس

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

  • إضافة حقل جديد
  • تعيين السمة retrievable على حقل موجود
  • تحديث searchAnalyzer في حقل يحتوي على حقل موجود indexAnalyzer
  • إضافة تعريف محلل جديد في فهرس (والذي يمكن تطبيقه على حقول جديدة)
  • إضافة ملفات تعريف تسجيل النقاط أو تحديثها أو حذفها
  • إضافة إعدادات CORS أو تحديثها أو حذفها
  • إضافة مرادفات أو تحديثها أو حذفها
  • إضافة التكوينات الدلالية أو تحديثها أو حذفها

ترتيب العمليات هو:

  1. الحصول على تعريف الفهرس.

  2. راجع المخطط مع التحديثات من القائمة السابقة.

  3. تحديث مخطط الفهرس على خدمة البحث.

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

عند تحديث مخطط فهرس لتضمين حقل جديد، يتم إعطاء المستندات الموجودة في الفهرس قيمة خالية لهذا الحقل. في مهمة الفهرسة التالية، تحل القيم من بيانات المصدر الخارجي محل القيم الخالية المضافة بواسطة Azure الذكاء الاصطناعي Search.

يجب ألا تكون هناك أي اضطرابات في الاستعلام أثناء التحديثات، ولكن ستختلف نتائج الاستعلام مع سريان التحديثات.

إسقاط فهرس وإعادة إنشائه

تتطلب بعض التعديلات إسقاط الفهرس وإعادة إنشائه، واستبدال فهرس حالي بفهرس جديد.

الإجراء ‏‏الوصف
حذف حقل لإزالة جميع آثار الحقل فعليا، يجب إعادة إنشاء الفهرس. عندما لا تكون إعادة الإنشاء الفورية عملية، يمكنك تعديل التعليمات البرمجية للتطبيق لإعادة توجيه الوصول بعيدا عن حقل قديم أو استخدام searchFields وتحديد معلمات الاستعلام لاختيار الحقول التي يتم البحث فيها وإرجاعها. فعليا، يظل تعريف الحقل ومحتوياته في الفهرس حتى إعادة البناء التالية، عند تطبيق مخطط يحذف الحقل المعني.
تغيير تعريف الحقل تتطلب المراجعات التي تتم على اسم حقل أو نوع بيانات أو سمات فهرس معينة (قابلة للبحث، وقابلة للتصفية، وقابلة للفرز، وقابلة للواجهة) إعادة إنشاء كاملة.
تعيين محلل لحقل يتم تعريف المحللات في فهرس، وتعيينها إلى حقول، ثم استدعاؤها أثناء الفهرسة لإعلام كيفية إنشاء الرموز المميزة. يمكنك إضافة تعريف محلل جديد إلى فهرس في أي وقت، ولكن يمكنك فقط تعيين محلل عند إنشاء الحقل. هذا صحيح لكل من خصائص المحلل و indexAnalyzer. الخاصية searchAnalyzer هي استثناء (يمكنك تعيين هذه الخاصية إلى حقل موجود).
تحديث تعريف محلل أو حذفه في فهرس لا يمكنك حذف أو تغيير تكوين محلل موجود (محلل أو رمز مميز أو عامل تصفية رمز مميز أو عامل تصفية حرف) في الفهرس ما لم تقم بإعادة إنشاء الفهرس بأكمله.
إضافة حقل إلى مقترح إذا كان هناك حقل موجود بالفعل وتريد إضافته إلى بنية Suggesters ، ف أعد إنشاء الفهرس.
تبديل المستويات الترقيات الموضعية غير مدعومة. إذا كنت بحاجة إلى المزيد من السعة، فبادر بإنشاء خدمة جديدة وإعادة إنشاء الفهارس من البداية. للمساعدة في أتمتة هذه العملية، يمكنك استخدام نموذج التعليمات البرمجية لعينة الفهرس-النسخ الاحتياطي-الاستعادة في مستودع نموذج Azure الذكاء الاصطناعي Search .NET. يقوم هذا التطبيق بنسخ الفهرس احتياطيا إلى سلسلة من ملفات JSON، ثم إعادة إنشاء الفهرس في خدمة بحث تحددها.

ترتيب العمليات هو:

  1. احصل على تعريف فهرس في حالة الحاجة إليه للرجوع إليه في المستقبل، أو لاستخدامه كأساس لإصدار جديد.

  2. ضع في اعتبارك استخدام حل النسخ الاحتياطي والاستعادة للحفاظ على نسخة من محتوى الفهرس. هناك حلول في C#‎ وPython. نوصي بإصدار Python لأنه محدث أكثر.

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

  3. إسقاط الفهرس الموجود. يتم إسقاط الاستعلامات التي تستهدف الفهرس على الفور. تذكر أن حذف فهرس لا رجعة فيه، مما يؤدي إلى تدمير التخزين الفعلي لمجموعة الحقول والبنى الأخرى.

  4. انشر فهرسا تمت مراجعته، حيث يتضمن نص الطلب تعريفات وتكوينات الحقول التي تم تغييرها أو تعديلها.

  5. قم بتحميل الفهرس بمستندات من مصدر خارجي. تتم فهرسة المستندات باستخدام تعريفات الحقول وتكوينات المخطط الجديد.

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

موازنة أحمال العمل

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

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

تحقق من وجود تحديثات

يمكنك البدء في الاستعلام عن فهرس بمجرد تحميل المستند الأول. إذا كنت تعرف معرف المستند، فترجع واجهة برمجة تطبيقات REST لمستند البحث المستند المحدد. للاختبار الأوسع، يجب الانتظار حتى يتم تحميل الفهرس بالكامل، ثم استخدام الاستعلامات للتحقق من السياق الذي تتوقع رؤيته.

يمكنك استخدام Search Explorer أو عميل REST للتحقق من وجود محتوى محدث.

إذا قمت بإضافة حقل أو إعادة تسميته، فاستخدم $select لإرجاع هذا الحقل: search=*&$select=document-id,my-new-field,some-old-field&$count=true.

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

حذف المستندات المعزولة

يدعم Azure الذكاء الاصطناعي Search العمليات على مستوى المستند بحيث يمكنك البحث عن مستند معين وتحديثه وحذفه بشكل منفصل. يوضح المثال التالي كيفية حذف مستند.

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

  1. تحديد الحقل الذي هو مفتاح المستند. في المدخل، يمكنك عرض حقول كل فهرس. مفاتيح المستند هي حقول سلسلة ويتم توضيحها باستخدام أيقونة مفتاح لتسهيل اكتشافها.

  2. تحقق من قيم حقل مفتاح المستند: search=*&$select=HotelId. سلسلة بسيطة واضحة، ولكن إذا كان الفهرس يستخدم حقلا مشفرا base-64، أو إذا تم إنشاء مستندات البحث من parsingMode إعداد، فقد تعمل مع القيم التي لا تعرفها.

  3. ابحث عن المستند للتحقق من قيمة معرف المستند ومراجعة محتواه قبل حذفه. حدد المفتاح أو معرف المستند في الطلب. توضح الأمثلة التالية سلسلة بسيطة لفهرس عينة الفنادق وسلسلة مشفرة base-64 للمفتاح metadata_storage_path لفهرس cog-search-demo.

    GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2023-11-01
    
    GET https://[service name].search.windows.net/indexes/cog-search-demo/docs/aHR0cHM6Ly9oZWlkaWJsb2JzdG9yYWdlMi5ibG9iLmNvcmUud2luZG93cy5uZXQvY29nLXNlYXJjaC1kZW1vL2d1dGhyaWUuanBn0?api-version=2023-11-01
    
  4. احذف المستند باستخدام حذف @search.action لإزالته من فهرس البحث.

    POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2023-11-01
    Content-Type: application/json   
    api-key: [admin key] 
    {  
      "value": [  
        {  
          "@search.action": "delete",  
          "id": "1111"  
        }  
      ]  
    }
    

(راجع أيضًا )