إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ملاحظة
تُعد هذه الميزة قيد الإصدار الأولي العام في الوقت الحالي. يتم توفير هذه المعاينة دون اتفاقية على مستوى الخدمة ولا يوصى بها لأحمال عمل الإنتاج. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة. لمزيد من المعلومات، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.
يمكن ل Azure الذكاء الاصطناعي Search فهرسة مستندات Markdown والصفائف في Azure Blob Storage باستخدام مفهرس يعرف كيفية قراءة بيانات Markdown.
يوضح لك هذا الدرس كيفية فهرسة ملفات ماركداون المفهرسة باستخدام oneToMany وضع تحليل ماركداون وواجهات برمجة تطبيقات REST الخاصة بخدمة البحث.
في هذا البرنامج التعليمي، سوف تتعلّم:
- إعداد نموذج البيانات وتكوين
azureblobمصدر بيانات - إنشاء فهرس Azure الذكاء الاصطناعي Search لاحتواء محتوى قابل للبحث
- إنشاء مفهرس وتشغيله لقراءة الحاوية واستخراج محتوى قابل للبحث
- البحث في الفهرس الذي أنشأته للتو
المتطلبات الأساسية
حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
ملاحظة
يمكنك استخدام خدمة بحث مجانية لهذا البرنامج التعليمي. يحدد لك المستوى المجاني ثلاثة فهارس وثلاثة مفهرسات وثلاثة مصادر بيانات. ينشئ هذا البرنامج التعليمي واحدًا من كلٍّ منها. قبل أن تبدأ، تأكد من أن خدمتك لديها مساحة لقبول الموارد الجديدة.
تحضير بيانات العينة
إنشاء ملف ماركداون
انسخ Markdown التالية والصقها في ملف يسمى sample_markdown.md. نموذج البيانات هو ملف Markdown واحد يحتوي على عناصر Markdown مختلفة. اخترنا ملف Markdown واحدا للبقاء ضمن حدود التخزين للطبقة المجانية.
# Project Documentation
## Introduction
This document provides a complete overview of the **Markdown Features** used within this project. The following sections demonstrate the richness of Markdown formatting, with examples of lists, tables, links, images, blockquotes, inline styles, and more.
---
## Table of Contents
1. [Headers](#headers)
2. [Introduction](#introduction)
3. [Basic Text Formatting](#basic-text-formatting)
4. [Lists](#lists)
5. [Blockquotes](#blockquotes)
6. [Images](#images)
7. [Links](#links)
8. [Tables](#tables)
9. [Code Blocks and Inline Code](#code-blocks-and-inline-code)
10. [Horizontal Rules](#horizontal-rules)
11. [Inline Elements](#inline-elements)
12. [Escaping Characters](#escaping-characters)
13. [HTML Elements](#html-elements)
14. [Emojis](#emojis)
15. [Footnotes](#footnotes)
16. [Task Lists](#task-lists)
17. [Conclusion](#conclusion)
---
## Headers
Markdown supports six levels of headers. Use `#` to create headers:
"# Project Documentation" at the top of the document is an example of an h1 header.
"## Headers" above is an example of an h2 header.
### h3 example
#### h4 example
##### h5 example
###### h6 example
This is an example of content underneath a header.
## Basic Text Formatting
You can apply various styles to your text:
- **Bold**: Use double asterisks or underscores: `**bold**` or `__bold__`.
- *Italic*: Use single asterisks or underscores: `*italic*` or `_italic_`.
- ~~Strikethrough~~: Use double tildes: `~~strikethrough~~`.
## Lists
### Ordered List
1. First item
2. Second item
3. Third item
### Unordered List
- Item A
- Item B
- Item C
### Nested List
1. Parent item
- Child item
- Child item
## Blockquotes
> This is a blockquote.
> Blockquotes are great for emphasizing important information.
>> Nested blockquotes are also possible!
## Images

## Links
[Visit Markdown Guide](https://www.markdownguide.org)
## Tables
| Syntax | Description | Example |
|-------------|-------------|---------------|
| Header | Title | Header Cell |
| Paragraph | Text block | Row Content |
## Code Blocks and Inline Code
### Inline Code
Use backticks to create `inline code`.
### Code Block
```javascript
// JavaScript example
function greet(name) {
console.log(`Hello, ${name}!`);
}
greet('World');
```
## Horizontal Rules
Use three or more dashes or underscores to create a horizontal rule.
---
___
## Inline Elements
Sometimes, it’s useful to include `inline code` to highlight code-like content.
You can also emphasize text like *this* or make it **bold**.
## Escaping Characters
To render special Markdown characters, use backslashes:
- \*Asterisks\*
- \#Hashes\#
- \[Brackets\]
## HTML Elements
You can mix HTML tags with Markdown:
<table>
<tr>
<th>HTML Table</th>
<th>With Markdown</th>
</tr>
<tr>
<td>Row 1</td>
<td>Data 1</td>
</tr>
</table>
## Emojis
Markdown supports some basic emojis:
- :smile: 😄
- :rocket: 🚀
- :checkered_flag: 🏁
## Footnotes
This is an example of a footnote[^1]. Footnotes allow you to add notes without cluttering the main text.
[^1]: This is the content of the footnote.
## Task Lists
- [x] Complete the introduction
- [ ] Add more examples
- [ ] Review the document
## Conclusion
Markdown is a lightweight yet powerful tool for writing documentation. It supports a variety of formatting options while maintaining simplicity and readability.
Thank you for reviewing this example!
قم بتحميل الملف واحصل على سلسلة اتصال
اتبع هذه التعليمات لرفع الملف sample_markdown.md إلى حاوية في حساب Azure Storage الخاص بك. يجب عليك أيضا الحصول على سلسلة اتصال حساب التخزين. دون ملاحظة لسلسلة الاتصال واسم الحاوية لاستخدامها لاحقا.
نسخ عنوان URL لخدمة البحث ومفتاح API
بالنسبة لهذا البرنامج التعليمي، تتطلب الاتصالات ب Azure الذكاء الاصطناعي Search نقطة نهاية ومفتاح API. يمكنك الحصول على هذه القيم من مدخل Microsoft Azure. للحصول على أساليب اتصال بديلة، راجع الهويات المدارة.
انتقل إلى خدمة البحث في مدخل Microsoft Azure.
من الجزء الأيمن، حدد نظرة عامة.
قم بتدوين عنوان URL ، والذي يجب أن يبدو مثل
https://my-service.search.windows.net.من الجزء الأيمن، حدد Settings>Keys.
دون ملاحظة لمفتاح المسؤول للحصول على كامل الصلاحيات على الخدمة. هناك مفتاحان مسؤولان قابلان للتبديل، مقدمان لاستمرارية العمل في حالة الحاجة إلى لفة واحدة. يمكنك استخدام أي من المفتاحين في الطلبات لإضافة أو تعديل أو حذف الكائنات.
إعداد ملف REST
أنشئ ملفا باستخدام كود Visual Studio.
توفير قيم للمتغيرات المستخدمة في الطلب.
@baseUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE @apiKey = PUT-YOUR-ADMIN-API-KEY-HERE @storageConnectionString = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE @blobContainer = PUT-YOUR-CONTAINER-NAME-HEREاحفظ الملف باستخدام
.restملحق ملف أو.http.
للحصول على تعليمات حول عميل REST، راجع التشغيل السريع: البحث عن النص الكامل باستخدام REST.
قم بإنشاء مصدر بيانات
إنشاء مصدر بيانات (REST) ينشئ اتصال مصدر بيانات يحدد البيانات التي يجب فهرستها.
### Create a data source
POST {{baseUrl}}/datasources?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"name" : "sample-markdown-ds",
"description": null,
"type": "azureblob",
"subtype": null,
"credentials": {
"connectionString": "{{storageConnectionString}}"
},
"container": {
"name": "{{blobContainer}}",
"query": null
},
"dataChangeDetectionPolicy": null,
"dataDeletionDetectionPolicy": null
}
أرسل الطلب. يجب أن تبدو الاستجابة كما يلي:
HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
ETag: "0x8DCF52E926A3C76"
Location: https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net:443/datasources('sample-markdown-ds')?api-version=2025-09-01
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 0714c187-217e-4d35-928a-5069251e5cba
elapsed-time: 204
Date: Fri, 25 Oct 2024 19:52:35 GMT
Connection: close
{
"@odata.context": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/$metadata#datasources/$entity",
"@odata.etag": "\"0x8DCF52E926A3C76\"",
"name": "sample-markdown-ds",
"description": null,
"type": "azureblob",
"subtype": null,
"credentials": {
"connectionString": null
},
"container": {
"name": "markdown-container",
"query": null
},
"dataChangeDetectionPolicy": null,
"dataDeletionDetectionPolicy": null,
"encryptionKey": null,
"identity": null
}
إنشاء فهرس
إنشاء فهرس (REST) ينشئ فهرس بحث على خدمة البحث. يحدد الفهرس كافة الحقول وسماتها.
في التحليل واحد إلى متعدد، يحدد مستند البحث الجانب "متعدد" من العلاقة. تحدد الحقول التي تحددها في الفهرس بنية مستند البحث.
تحتاج فقط إلى حقول لعناصر Markdown التي يدعمها المحلل. هذه الحقول هي:
content: سلسلة تحتوي على Markdown الخام الموجودة في موقع معين، استنادا إلى بيانات تعريف الرأس في تلك النقطة في المستند.sections: كائن يحتوي على حقول فرعية لبيانات تعريف الرأس حتى مستوى الرأس المطلوب. على سبيل المثال، عندmarkdownHeaderDepthتعيين إلىh3، يحتوي على حقولh1سلسلة وh2و.h3تتم فهرسة هذه الحقول عن طريق النسخ المتطابق لهذه البنية في الفهرس، أو من خلال تعيينات الحقول بالتنسيق/sections/h1، ،sections/h2وما إلى ذلك. للحصول على أمثلة في السياق، راجع تكوينات الفهرس والمفهرس في العينات التالية. الحقول الفرعية المضمنة هي:-
h1- سلسلة تحتوي على قيمة رأس h1. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند. - (اختياري)
h2- سلسلة تحتوي على قيمة رأس h2. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند. - (اختياري)
h3- سلسلة تحتوي على قيمة رأس h3. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند. - (اختياري)
h4- سلسلة تحتوي على قيمة رأس h4. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند. - (اختياري)
h5- سلسلة تحتوي على قيمة رأس h5. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند. - (اختياري)
h6- سلسلة تحتوي على قيمة رأس h6. سلسلة فارغة إذا لم يتم تعيينها عند هذه النقطة في المستند.
-
ordinal_position: قيمة عدد صحيح تشير إلى موضع المقطع داخل التسلسل الهرمي للمستند. يتم استخدام هذا الحقل لترتيب المقاطع في تسلسلها الأصلي كما تظهر في المستند، بدءا من موضع ترتيبي من 1 والتكبير بشكل تسلسلي لكل كتلة محتوى.
يستخدم هذا التنفيذ تعيينات الحقول في المفهرس لتعيين من المحتوى الذي تم إثرائه إلى الفهرس. لمزيد من المعلومات حول بنية مستند واحد إلى متعدد، راجع الكائنات الثنائية كبيرة الحجم لعلامة الفهرس.
يوفر هذا المثال نماذج لكيفية فهرسة البيانات مع تعيينات الحقول وبدونها. في هذه الحالة، نعلم أن h1 يحتوي على عنوان المستند، حتى نتمكن من تعيينه إلى حقل يسمى title. سنقوم أيضا بتعيين الحقلين h2 و h3 إلى h2_subheader و h3_subheaderعلى التوالي.
content لا يتطلب الحقلان و ordinal_position أي تعيين لأنه يتم استخراجهما من Markdown مباشرة إلى الحقول باستخدام هذه الأسماء. للحصول على مثال لمخطط فهرس كامل لا يتطلب تعيينات الحقول، راجع نهاية هذا القسم.
### Create an index
POST {{baseUrl}}/indexes?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"name": "sample-markdown-index",
"fields": [
{"name": "id", "type": "Edm.String", "key": true, "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "content", "type": "Edm.String", "key": false, "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "title", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "h2_subheader", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "h3_subheader", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "ordinal_position", "type": "Edm.Int32", "searchable": false, "retrievable": true, "filterable": true, "facetable": true, "sortable": true}
]
}
مخطط الفهرس في تكوين بدون تعيينات حقول
تسمح لك تعيينات الحقول بمعالجة المحتوى المخصب وتصفيته ليتناسب مع شكل الفهرس المطلوب. ومع ذلك، قد ترغب فقط في أخذ المحتوى الذي تم إثرائه مباشرة. في هذه الحالة، سيبدو المخطط كما يلي:
{
"name": "sample-markdown-index",
"fields": [
{"name": "id", "type": "Edm.String", "key": true, "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "content", "type": "Edm.String", "key": false, "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "sections",
"type": "Edm.ComplexType",
"fields": [
{"name": "h1", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "h2", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true},
{"name": "h3", "type": "Edm.String", "searchable": true, "retrievable": true, "filterable": true, "facetable": true, "sortable": true}
]
},
{"name": "ordinal_position", "type": "Edm.Int32", "searchable": false, "retrievable": true, "filterable": true, "facetable": true, "sortable": true}
]
}
للتكرار، لدينا حقول فرعية تصل إلى h3 في كائن المقاطع لأنه markdownHeaderDepth تم تعيين إلى h3.
إذا كنت تستخدم هذا المخطط، فتأكد من ضبط الطلبات اللاحقة وفقا لذلك. سيتطلب ذلك إزالة تعيينات الحقول من تكوين المفهرس وتحديث استعلامات البحث لاستخدام أسماء الحقول المقابلة.
إنشاء مفهرس وتشغيله
إنشاء مفهرس ينشئ مفهرس على خدمة البحث. يتصل المفهرس بمصدر البيانات، ويحمل البيانات ويفهرسها، ويوفر جدولا اختياريا لأتمتة تحديث البيانات.
### Create and run an indexer
POST {{baseUrl}}/indexers?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"name": "sample-markdown-indexer",
"dataSourceName": "sample-markdown-ds",
"targetIndexName": "sample-markdown-index",
"parameters" : {
"configuration": {
"parsingMode": "markdown",
"markdownParsingSubmode": "oneToMany",
"markdownHeaderDepth": "h3"
}
},
"fieldMappings" : [
{
"sourceFieldName": "/sections/h1",
"targetFieldName": "title",
"mappingFunction": null
}
]
}
النقاط الرئيسية:
سيقوم المفهرس فقط بتحليل الرؤوس حتى
h3. أي رؤوس في المستوى الأدنى (h4,h5,h6) تعامل كنص عادي وتظهر فيcontentالحقل. هذا هو السبب في أن تعيينات الفهرس والحقول موجودة فقط حتى عمقh3.لا يتطلب الحقلان
contentوordinal_positionتعيين حقل لأنهما موجودان بهذه الأسماء في المحتوى الذي تم إثرائه.
تفعيل الاستعلامات
يمكنك بدء البحث بمجرد تحميل المستند الأول.
### Query the index
POST {{baseUrl}}/indexes/sample-markdown-index/docs/search?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "*",
"count": true
}
أرسل الطلب. هذا استعلام بحث نص كامل غير محدد يقوم بإرجاع كافة الحقول التي تم وضع علامة عليها على أنها قابلة للاسترداد في الفهرس، إلى جانب عدد المستندات. يجب أن تبدو الاستجابة كما يلي:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 6b94e605-55e8-47a5-ae15-834f926ddd14
elapsed-time: 77
Date: Fri, 25 Oct 2024 20:22:58 GMT
Connection: close
{
"@odata.context": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes('sample-markdown-index')/$metadata#docs(*)",
"@odata.count": 22,
"value": [
<22 search documents here>
]
}
إضافة معلمة search للبحث في سلسلة.
### Query the index
POST {{baseUrl}}/indexes/sample-markdown-index/docs/search?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "h4",
"count": true
}
أرسل الطلب. يجب أن تبدو الاستجابة كما يلي:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: ec5d03f1-e3e7-472f-9396-7ff8e3782105
elapsed-time: 52
Date: Fri, 25 Oct 2024 20:26:29 GMT
Connection: close
{
"@odata.context": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes('sample-markdown-index')/$metadata#docs(*)",
"@odata.count": 1,
"value": [
{
"@search.score": 0.8744742,
"section_id": "aHR0cHM6Ly9hcmphZ2Fubmpma2ZpbGVzLmJsb2IuY29yZS53aW5kb3dzLm5ldC9tYXJrZG93bi10dXRvcmlhbC9zYW1wbGVfbWFya2Rvd24ubWQ7NA2",
"content": "#### h4 example\r\n##### h5 example\r\n###### h6 example\r\nThis is an example of content underneath a header.\r\n",
"title": "Project Documentation",
"h2_subheader": "Headers",
"h3_subheader": "h3 example",
"ordinal_position": 4
}
]
}
النقاط الرئيسية:
markdownHeaderDepthنظرا لتعيين إلىh3،h4h5يتم التعامل مع الرؤوس و وh6كنص عادي، بحيث تظهر فيcontentالحقل.الموضع الترتيبي هنا هو
4. يظهر هذا المحتوى الرابع من إجمالي 22 مقطع محتوى.
إضافة معلمة select للحد من النتائج إلى حقول أقل.
filter أضف لتضييق نطاق البحث.
### Query the index
POST {{baseUrl}}/indexes/sample-markdown-index/docs/search?api-version=2025-09-01 HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "Markdown",
"count": true,
"select": "title, content, h2_subheader",
"filter": "h2_subheader eq 'Conclusion'"
}
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: a6f9bd46-a064-4e28-818f-ea077618014b
elapsed-time: 35
Date: Fri, 25 Oct 2024 20:36:10 GMT
Connection: close
{
"@odata.context": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes('sample-markdown-index')/$metadata#docs(*)",
"@odata.count": 1,
"value": [
{
"@search.score": 1.1029507,
"content": "Markdown is a lightweight yet powerful tool for writing documentation. It supports a variety of formatting options while maintaining simplicity and readability.\r\n\r\nThank you for reviewing this example!",
"title": "Project Documentation",
"h2_subheader": "Conclusion"
}
]
}
بالنسبة إلى عوامل التصفية، يمكنك أيضا استخدام عوامل التشغيل المنطقية (و، أو لا) وعوامل المقارنة (eq، ne، gt، lt، ge، le). مقارنات السلاسل حساسة لحالة الأحرف. لمزيد من المعلومات والأمثلة، راجع إنشاء استعلام.
ملاحظة
تعمل المعلمة $filter فقط على الحقول التي تم وضع علامة عليها قابلة للتصفية عند إنشاء الفهرس.
إعادة تعيين وإعادة تشغيل
يمكن إعادة تعيين المفهرسات لمسح محفوظات التنفيذ، ما يسمح بإعادة التشغيل الكامل. طلبات GET التالية لإعادة التعيين، متبوعة بإعادة التشغيل.
### Reset the indexer
POST {{baseUrl}}/indexers/sample-markdown-indexer/reset?api-version=2025-09-01 HTTP/1.1
api-key: {{apiKey}}
### Run the indexer
POST {{baseUrl}}/indexers/sample-markdown-indexer/run?api-version=2025-09-01 HTTP/1.1
api-key: {{apiKey}}
### Check indexer status
GET {{baseUrl}}/indexers/sample-markdown-indexer/status?api-version=2025-09-01 HTTP/1.1
api-key: {{apiKey}}
تنظيف الموارد
عندما تعمل في اشتراكك الخاص، في نهاية المشروع، من المستحسن إزالة الموارد التي لم تعد بحاجة إليها. الموارد المتبقية قيد التشغيل يمكن أن تكلفك المال. يمكنك حذف الموارد بشكل فردي أو حذف مجموعة الموارد لحذف تشكيلة الموارد بأكملها.
يمكنك استخدام مدخل Microsoft Azure لحذف الفهارس والمفهرسات ومصادر البيانات.
الخطوات التالية
الآن بعد أن أصبحت على دراية بأساسيات فهرسة Azure Blob، ألق نظرة فاحصة على تكوين المفهرس ل Markdown blobs في Azure Storage: