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

مراحل المفهرس

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

"outputFieldMappings": [
  {
    "sourceFieldName": "document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],

على النقيض من fieldMappings التعريف الذي يعين مسارا بين بنيتي بيانات فعليتين، outputFieldMappings يقوم التعريف بتعيين عمليات الإثراء في الذاكرة إلى الحقول في فهرس البحث.

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

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

تنطبق تعيينات حقول الإخراج على:

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

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

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

تعريف تعيين حقل إخراج

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

"fieldMappings": []
"outputFieldMappings": [
  {
    "sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],
الخاصية ‏‏الوصف
sourceFieldName مطلوب. تحديد مسار للمحتوى الذي تم إثرائه. مثال قد be /document/content. راجع الإثراء المرجعي في مجموعة مهارات Azure الذكاء الاصطناعي Search للحصول على بناء جملة المسار والأمثلة.
targetFieldName اختياري. تحديد حقل البحث الذي يتلقى المحتوى الذي تم إثرائه. يجب أن تكون الحقول الهدف حقولا أو مجموعات بسيطة من المستوى الأعلى. لا يمكن أن يكون مسارا إلى حقل فرعي في نوع معقد. إذا كنت ترغب في استرداد عقد معينة في بنية معقدة، يمكنك تسوية العقد الفردية في الذاكرة، ثم إرسال الإخراج إلى مجموعة سلسلة في الفهرس الخاص بك.
تعيين وظيفة اختياري. يضيف معالجة إضافية توفرها وظائف التعيين التي تدعمها المفهرسات. بالنسبة لعقد الإثراء، فإن الترميز وفك التشفير هما الدوال الأكثر استخداما.

يمكنك استخدام واجهة برمجة تطبيقات REST أو Azure SDK لتحديد تعيينات حقل الإخراج.

تلميح

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

استخدم Create Indexer (REST) أو Update Indexer (REST)، أي إصدار API.

يضيف هذا المثال الكيانات وتسميات التوجه المستخرجة من خاصية محتوى كائن ثنائي كبير الحجم إلى الحقول في فهرس البحث.

PUT https://[service name].search.windows.net/indexers/myindexer?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
    "name": "myIndexer",
    "dataSourceName": "myDataSource",
    "targetIndexName": "myIndex",
    "skillsetName": "myFirstSkillSet",
    "fieldMappings": [],
    "outputFieldMappings": [
        {
            "sourceFieldName": "/document/content/organizations/*/description",
            "targetFieldName": "descriptions",
            "mappingFunction": {
                "name": "base64Decode"
            }
        },
        {
            "sourceFieldName": "/document/content/organizations",
            "targetFieldName": "orgNames"
        },
        {
            "sourceFieldName": "/document/content/sentiment",
            "targetFieldName": "sentiment"
        }
    ]
}

لكل تعيين لحقل الإخراج، قم بتعيين موقع البيانات في شجرة المستندات التي تم إثراؤها (sourceFieldName)، واسم الحقل كما هو مشار إليه في الفهرس (targetFieldName). قم بتعيين أي وظائف تعيين مطلوبة لتحويل محتوى حقل قبل تخزينه في الفهرس.

تبسيط البنيات المعقدة في مجموعة سلاسل

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

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

فيما يلي مثال على مستند في Azure Cosmos DB مع JSON المتداخل:

{
   "palette":"primary colors",
   "colors":[
      {
         "name":"blue",
         "medium":[
            "acrylic",
            "oil",
            "pastel"
         ]
      },
      {
         "name":"red",
         "medium":[
            "acrylic",
            "pastel",
            "watercolor"
         ]
      },
      {
         "name":"yellow",
         "medium":[
            "acrylic",
            "watercolor"
         ]
      }
   ]
}

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

{
  "name": "my-test-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true},
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "colors", "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "name",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "medium",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "retrievable": true,
        }
      ]
    }
  ]
}

فيما يلي نموذج لتعريف المفهرس الذي ينفذ الاستيراد (لاحظ أنه لا توجد تعيينات حقول ولا توجد مجموعة مهارات).

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-test-index",

  "fieldMappings": [],
  "outputFieldMappings": []
}

والنتيجة هي نموذج مستند البحث التالي، على غرار المستند الأصلي في Azure Cosmos DB.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "colors": [
        {
          "name": "blue",
          "medium": [
            "acrylic",
            "oil",
            "pastel"
          ]
        },
        {
          "name": "red",
          "medium": [
            "acrylic",
            "pastel",
            "watercolor"
          ]
        },
        {
          "name": "yellow",
          "medium": [
            "acrylic",
            "watercolor"
          ]
        }
      ]
    }
  ]
}

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

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

فيما يلي نموذج لتعريف الفهرس، باستخدام مجموعات السلاسل لتلقي الإخراج المسطح:

{
  "name": "my-new-flattened-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true },
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "color_names", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true },
    { "name": "color_mediums", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true}
  ]
}

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

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-new-flattened-index",
  "parameters": {  },
  "fieldMappings": [   ],
  "outputFieldMappings": [
    {
       "sourceFieldName": "/document/colors/*/name",
       "targetFieldName": "color_names"
    },
    {
       "sourceFieldName": "/document/colors/*/medium",
       "targetFieldName": "color_mediums"
    }
  ]
}

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

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "color_names": [
        "blue",
        "red",
        "yellow"
      ],
      "color_mediums": [
        "[\"acrylic\",\"oil\",\"pastel\"]",
        "[\"acrylic\",\"pastel\",\"watercolor\"]",
        "[\"acrylic\",\"watercolor\"]"
      ]
    }
  ]
}

(راجع أيضًا )