فهرس نقاط JSON والملفات في البحث المعرفي في Azure
ينطبق على: مفهرسات Blob، مفهرساتالملفات
توضح لك هذه المقالة كيفية تعيين خصائص خاصة ب JSON للنقاط أو الملفات التي تتكون من مستندات JSON. عادة ما تفترض نقاط JSON في Azure Blob Storage أو Azure File Storage أيا من هذه الأشكال:
- مستند JSON واحد
- مستند JSON يحتوي على مجموعة من عناصر JSON جيدة التكوين
- مستند JSON يحتوي على كيانات متعددة، مفصولة بسطر جديد
يوفر مفهرس blob معلمة "parsingMode" لتحسين مخرجات مستند البحث استنادا إلى البنية. تتكون أوضاع التحليل من الخيارات التالية:
| وضع التحليل | وثيقة JSON | الوصف |
|---|---|---|
json |
واحد لكل نقطة | (افتراضي) يحلل نقاط JSON كقطعة واحدة من النص. تصبح كل نقطة JSON مستند بحث واحد. |
jsonArray |
متعدد لكل نقطة | يوزع صفيف JSON في النقطة، حيث يصبح كل عنصر من عناصر الصفيف مستند بحث منفصلا. |
jsonLines |
متعدد لكل نقطة | يحلل نقطة تحتوي على كيانات JSON متعددة (أيضا صفيف) ، مع عناصر فردية مفصولة بسطر جديد. يبدأ المفهرس مستند بحث جديد بعد كل سطر جديد. |
بالنسبة لكليهما jsonArrayjsonLines، يجب عليك مراجعة فهرسة نقطة واحدة لإنتاج العديد من مستندات البحث لفهم كيفية تعامل مفهرس النقطة مع إزالة الغموض عن مفتاح المستند لمستندات بحث متعددة تم إنتاجها من نفس النقطة.
ضمن تعريف المفهرس، يمكنك اختياريا تعيين تعيينات الحقول لاختيار خصائص مستند JSON المصدر المستخدمة لملء فهرس البحث المستهدف. على سبيل المثال، عند استخدام jsonArray وضع التحليل، إذا كان الصفيف موجودا كخاصية ذات مستوى أدنى، يمكنك تعيين خاصية "documentRoot" تشير إلى مكان وضع الصفيف داخل النقطة.
تصف الأقسام التالية كل وضع بمزيد من التفصيل. إذا لم تكن معتادا على عملاء المفهرسين ومفاهيمهم، فراجع إنشاء مفهرس بحث. يجب أن تكون أيضا على دراية بتفاصيل تكوين مفهرس blob الأساسي ، والذي لا يتكرر هنا.
فهرس مستندات JSON مفردة (واحد لكل نقطة)
بشكل افتراضي، تقوم مفهرسات الفقاعات بتحليل نقاط JSON كجزء واحد من النص، مستند بحث واحد لكل نقطة في حاوية. إذا كان JSON منظما، يمكن أن تعكس وثيقة البحث هذه البنية، مع تمثيل العناصر الفردية كحقول فردية. على سبيل المثال، افترض أن لديك مستند JSON التالي في Azure Blob Storage:
{
"article" : {
"text" : "A hopefully useful article explaining how to parse JSON blobs",
"datePublished" : "2020-04-13",
"tags" : [ "search", "storage", "howto" ]
}
}
يقوم مفهرس النقاط بتحليل مستند JSON في مستند بحث واحد، ويقوم بتحميل فهرس عن طريق مطابقة "النص" و"datePublish" و"العلامات" من المصدر مقابل حقول الفهرس الهدف المسماة والمكتوبة بشكل متطابق. بالنظر إلى فهرس يحتوي على حقول "نص" و "datePublishing" و "tags" ، يمكن لمفهرس blob استنتاج التعيين الصحيح بدون تعيين حقل موجود في الطلب.
على الرغم من أن السلوك الافتراضي هو مستند بحث واحد لكل نقطة JSON، إلا أن تعيين وضع تحليل "json" يغير تعيينات الحقول الداخلية للمحتوى، مما يؤدي إلى ترقية الحقول الموجودة بالداخل content إلى الحقول الفعلية في فهرس البحث. مثال على تعريف المفهرس json لوضع التحليل قد يبدو كما يلي:
POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]
{
"name" : "my-json-indexer",
"dataSourceName" : "my-blob-datasource",
"targetIndexName" : "my-target-index",
"parameters" : { "configuration" : { "parsingMode" : "json" } }
}
ملاحظة
كما هو الحال مع جميع المفهرسات، إذا لم تتطابق الحقول بوضوح، فيجب أن تتوقع تحديد تعيينات الحقول الفردية بشكل صريح إلا إذا كنت تستخدم تعيينات الحقول الضمنية المتاحة لمحتوى blob والبيانات الوصفية، كما هو موضح في تكوين مفهرس blob الأساسي.
مثال json (ملفات JSON خاصة بالفندق)
تعد مجموعة بيانات مستند JSON الخاصة بالفندق على GitHub مفيدة لاختبار تحليل JSON ، حيث تمثل كل نقطة ملف JSON منظما. يمكنك تحميل ملفات البيانات إلى Blob Storage واستخدام معالج استيراد البيانات لتقييم كيفية تحليل هذا المحتوى بسرعة في مستندات بحث فردية.
تتكون مجموعة البيانات من خمس نقاط ، تحتوي كل منها على مستند فندق مع مجموعة عناوين ومجموعة غرف. يكتشف مفهرس blob كلا المجموعتين ويعكس بنية مستندات الإدخال في مخطط الفهرس.
تحليل صفائف JSON
بدلا من ذلك، يمكنك استخدام خيار صفيف JSON. يكون هذا الخيار مفيدا عندما تحتوي النقط على صفيف من كائنات JSON جيدة التكوين، وتريد أن يصبح كل عنصر مستند بحث منفصلا. باستخدام jsonArrays، تنتج نقطة JSON التالية ثلاثة مستندات منفصلة ، كل منها يحتوي على "id" حقول "text" .
[
{ "id" : "1", "text" : "example 1" },
{ "id" : "2", "text" : "example 2" },
{ "id" : "3", "text" : "example 3" }
]
تحتوي الخاصية "المعلمات" على المفهرس على قيم وضع التحليل. بالنسبة لصفيف JSON، يجب أن يبدو تعريف المفهرس مشابها للمثال التالي.
POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]
{
"name" : "my-json-indexer",
"dataSourceName" : "my-blob-datasource",
"targetIndexName" : "my-target-index",
"parameters" : { "configuration" : { "parsingMode" : "jsonArray" } }
}
مثال jsonArrays (بيانات عينة التجارب السريرية)
التجارب السريرية مجموعة بيانات JSON على GitHub مفيدة لاختبار تحليل صفيف JSON. يمكنك تحميل ملفات البيانات إلى وحدة تخزين Blob واستخدام معالج استيراد البيانات لتقييم كيفية تحليل هذا المحتوى بسرعة في مستندات بحث فردية.
تتكون مجموعة البيانات من ثماني نقاط ، يحتوي كل منها على مجموعة JSON من الكيانات ، لما مجموعه 100 كيان. تختلف الكيانات فيما يتعلق بالحقول التي يتم تعبئتها، ولكن النتيجة النهائية هي مستند بحث واحد لكل كيان، من جميع المصفوفات، في جميع النقاط.
تحليل صفائف JSON المتداخلة
بالنسبة لصفائف JSON التي تحتوي على عناصر متداخلة، يمكنك تحديد "documentRoot" للإشارة إلى بنية متعددة المستويات. على سبيل المثال ، إذا كانت النقط تبدو كما يلي:
{
"level1" : {
"level2" : [
{ "id" : "1", "text" : "Use the documentRoot property" },
{ "id" : "2", "text" : "to pluck the array you want to index" },
{ "id" : "3", "text" : "even if it's nested inside the document" }
]
}
}
استخدم هذا التكوين لفهرسة الصفيف الموجود في level2 الخاصية:
{
"name" : "my-json-array-indexer",
... other indexer properties
"parameters" : { "configuration" : { "parsingMode" : "jsonArray", "documentRoot" : "/level1/level2" } }
}
تحليل كيانات JSON مفصولة بخطوط جديدة
إذا كانت النقطة تحتوي على كيانات JSON متعددة مفصولة بسطر جديد، وتريد أن يصبح كل عنصر مستند بحث منفصلا، فاستخدم jsonLines.
{ "id" : "1", "text" : "example 1" }
{ "id" : "2", "text" : "example 2" }
{ "id" : "3", "text" : "example 3" }
بالنسبة لخطوط JSON، يجب أن يبدو تعريف المفهرس مشابها للمثال التالي.
POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]
{
"name" : "my-json-indexer",
"dataSourceName" : "my-blob-datasource",
"targetIndexName" : "my-target-index",
"parameters" : { "configuration" : { "parsingMode" : "jsonLines" } }
}
تعيين حقول JSON للبحث في الحقول
تستخدم تعيينات الحقول لإقران حقل مصدر بحقل وجهة في الحالات التي لا تكون فيها أسماء الحقول وأنواعها متطابقة. ولكن يمكن أيضا استخدام تعيينات الحقول لمطابقة أجزاء من مستند JSON و "رفعها" إلى حقول المستوى الأعلى من مستند البحث.
يوضح المثال التالي هذا السيناريو. لمزيد من المعلومات حول تعيينات الحقول بشكل عام، راجع تعيينات الحقول.
{
"article" : {
"text" : "A hopefully useful article explaining how to parse JSON blobs",
"datePublished" : "2016-04-13"
"tags" : [ "search", "storage", "howto" ]
}
}
افترض وجود فهرس بحث يحتوي على الحقول التالية: text من النوع والنوع Edm.DateTimeOffsetومن datetags النوع Collection(Edm.String)Edm.String. لاحظ التناقض بين "datePublishing" في المصدر والحقل date في الفهرس. لتعيين JSON إلى الشكل المطلوب، استخدم تعيينات الحقول التالية:
"fieldMappings" : [
{ "sourceFieldName" : "/article/text", "targetFieldName" : "text" },
{ "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" },
{ "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" }
]
يتم تحديد حقول المصدر باستخدام تدوين مؤشر JSON . تبدأ بشرطة مائلة للأمام للإشارة إلى جذر مستند JSON، ثم اختر الخاصية المطلوبة (عند مستوى تعسفي من التداخل) باستخدام مسار مفصول بشرطة مائلة للأمام.
يمكنك أيضا الرجوع إلى عناصر الصفيف الفردية باستخدام فهرس يستند إلى الصفر. على سبيل المثال، لاختيار العنصر الأول من صفيف "العلامات" من المثال أعلاه، استخدم تعيين حقل مثل هذا:
{ "sourceFieldName" : "/article/tags/0", "targetFieldName" : "firstTag" }
ملاحظة
إذا كان sourceFieldName يشير إلى خاصية غير موجودة في نقطة JSON، تخطي هذا التعيين بدون خطأ. يسمح هذا السلوك بمتابعة الفهرسة لنقاط JSON التي تحتوي على مخطط مختلف (وهي حالة استخدام شائعة). نظرا لعدم وجود فحص للتحقق من الصحة، تحقق من التعيينات بعناية بحثا عن الأخطاء المطبعية حتى لا تفقد المستندات لسبب خاطئ.