Azure AI Search'te Markdown bloblarını ve dosyalarını dizine ekleme
Not
Bu özellik şu anda genel önizlemededir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.
Azure AI Search'te Azure Blob Depolama, Azure Dosyalar ve OneLake dizin oluşturucuları Markdown dosyaları için ayrıştırma modunu desteklermarkdown
. Markdown dosyaları iki şekilde dizine eklenebilir:
- Markdown dosyası başına birden çok arama belgesi oluşturarak bire çok ayrıştırma modu
- Bire bir ayrıştırma modu, Markdown dosyası başına bir arama belgesi oluşturma
İpucu
Bu makaleyi gözden geçirdikten sonra Öğretici: Azure Blob Depolama Markdown verilerini arama konusuna devam edin.
Önkoşullar
Desteklenen bir veri kaynağı: Azure Blob depolama, Azure Dosya depolama, Microsoft Fabric'te OneLake.
OneLake için, OneLake dizin oluşturucusunun tüm gereksinimlerini karşıladığınızdan emin olun.
Blob dizin oluşturucuları ve dosya dizin oluşturucuları için Azure Depolama, sık erişimli ve seyrek erişimli erişim katmanlarını destekleyen standart bir performans (genel amaçlı v2) örneğidir.
Markdown ayrıştırma modu parametreleri
Ayrıştırma modu parametreleri, dizin oluşturucu oluşturduğunuzda veya güncelleştirdiğinizde dizin oluşturucu tanımında belirtilir.
POST https://[service name].search.windows.net/indexers?api-version=2024-11-01-preview
Content-Type: application/json
api-key: [admin key]
{
"name": "my-markdown-indexer",
"dataSourceName": "my-blob-datasource",
"targetIndexName": "my-target-index",
"parameters": {
"configuration": {
"parsingMode": "markdown",
"markdownParsingSubmode": "oneToMany",
"markdownHeaderDepth": "h6"
}
},
}
Blob dizin oluşturucu, arama belgelerinin yapısının çıkışını belirlemek için bir submode
parametre sağlar. Markdown ayrıştırma modu aşağıdaki alt mod seçeneklerini sağlar:
parsingMode | altmode | Belge arama | Açıklama |
---|---|---|---|
markdown |
oneToMany |
Blob başına birden çok | (varsayılan) Markdown'ı, her biri Markdown dosyasının içerik (başlıksız) bölümünü temsil eden birden çok arama belgesine böler. Bire bir ayrıştırma istemiyorsanız alt düğümü atlayabilirsiniz. |
markdown |
oneToOne |
Blob başına bir tane | Markdown dosyasının belirli üst bilgileriyle eşlenmiş bölümler ile Markdown'ı tek bir arama belgesine ayrıştırıyor. |
oneToMany
Altmode için, blob dizin oluşturucusunun aynı blobtan oluşturulan birden çok arama belgesi için belge anahtarının kesinleştirmesini nasıl işlediğini anlamak üzere birçok arama belgesi oluşturmak üzere Bir blobun dizinini oluşturma makalesini gözden geçirmeniz gerekir.
Sonraki bölümlerde her altmod daha ayrıntılı olarak açıklanmaktadır. Dizin oluşturucu istemcilerini ve kavramlarını bilmiyorsanız bkz . Arama dizin oluşturucu oluşturma. Burada yinelenmeyen temel blob dizin oluşturucu yapılandırmasının ayrıntılarını da biliyor olmalısınız.
İsteğe bağlı Markdown ayrıştırma parametreleri
Parametreler büyük/küçük harfe duyarlıdır.
Parametre adı | İzin Verilen Değerler | Açıklama |
---|---|---|
markdownHeaderDepth |
h1 , h2 , h3 , , h4 , h5 , h6(default) |
Bu parametre, ayrıştırma sırasında dikkate alınan en derin üst bilgi düzeyini belirler ve belge yapısının esnek bir şekilde işlenmesine olanak tanır (örneğin, markdownHeaderDepth olarak ayarlandığında h1 , ayrıştırıcı yalnızca "#" ile başlayan üst düzey üst bilgileri tanır ve tüm alt düzey üst bilgiler düz metin olarak kabul edilir). Belirtilmezse, varsayılan olarak olur h6 . |
Dizin oluşturucu ilk oluşturulduktan sonra bu ayar değiştirilebilir, ancak sonuçta elde edilen arama belgelerinin yapısı Markdown içeriğine bağlı olarak değişebilir.
Desteklenen Markdown öğeleri
Markdown ayrıştırma yalnızca üst bilgilere göre içeriği böler. Listeler, kod blokları, tablolar gibi diğer tüm öğeler düz metin olarak kabul edilir ve bir içerik alanına geçirilir.
Örnek Markdown içeriği
Bu sayfadaki örnekler için aşağıdaki Markdown içeriği kullanılır:
# Section 1
Content for section 1.
## Subsection 1.1
Content for subsection 1.1.
# Section 2
Content for section 2.
Bire çok ayrıştırma modunu kullanma
Bire çok ayrıştırma modu, Markdown dosyalarını birden çok arama belgesine ayrıştırıyor. Burada her belge, belgenin o noktasındaki üst bilgi meta verilerine göre Markdown dosyasının belirli bir içerik bölümüne karşılık geliyor. Markdown, aşağıdaki içeriği içeren arama belgelerine üst bilgiler temelinde ayrıştırılır:
content
: Belgenin o noktasındaki üst bilgi meta verilerini temel alarak belirli bir konumda bulunan ham Markdown'ı içeren dize.sections
: üst bilgi meta verileri için istenen üst bilgi düzeyine kadar alt alanları içeren bir nesne. Örneğin,markdownHeaderDepth
olarak ayarlandığındah3
, veh3
dize alanlarınıh1
h2
içerir. Bu alanlar, dizindeki bu yapıyı yansıtarak veya , vbsections/h2
biçimindeki/sections/h1
alan eşlemeleri aracılığıyla dizinlenir. Bağlam içi örnekler için aşağıdaki örneklerde dizin ve dizin oluşturucu yapılandırmalarına bakın. İçeren alt alanları şunlardır:h1
- h1 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize.- (İsteğe bağlı)
h2
- h2 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize. - (İsteğe bağlı)
h3
- h3 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize. - (İsteğe bağlı)
h4
- h4 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize. - (İsteğe bağlı)
h5
- h5 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize. - (İsteğe bağlı)
h6
- h6 üst bilgi değerini içeren bir dize. Belgenin bu noktasında ayarlanmadıysa boş dize.
ordinal_position
: Bölümün belge hiyerarşisi içindeki konumunu gösteren bir tamsayı değeri. Bu alan, bölümleri 1 sıralı bir konumdan başlayarak ve her üst bilgi için sıralı olarak artırılarak belgede göründükleri şekilde özgün sıralarında sıralamak için kullanılır.
Bire çok ayrıştırma için dizin şeması
Örnek dizin yapılandırması şuna benzer olabilir:
{
"name": "my-markdown-index",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true
},
{
"name": "content",
"type": "Edm.String",
},
{
"name": "ordinal_position",
"type": "Edm.Int32"
},
{
"name": "sections",
"type": "Edm.ComplexType",
"fields": [
{
"name": "h1",
"type": "Edm.String"
},
{
"name": "h2",
"type": "Edm.String"
}]
}]
}
Bire çok ayrıştırma için dizin oluşturucu tanımı
Alan adları ve veri türleri hizalanırsa, blob dizin oluşturucu istekte açık bir alan eşlemesi olmadan eşlemeyi çıkarabileceğinden, sağlanan dizin yapılandırmasına karşılık gelen bir dizin oluşturucu yapılandırması şöyle görünebilir:
POST https://[service name].search.windows.net/indexers?api-version=2024-11-01-preview
Content-Type: application/json
api-key: [admin key]
{
"name": "my-markdown-indexer",
"dataSourceName": "my-blob-datasource",
"targetIndexName": "my-target-index",
"parameters": {
"configuration": { "parsingMode": "markdown" }
},
}
Not
submode
varsayılan olduğundan burada oneToMany
açıkça ayarlanması gerekmez.
Bire çok ayrıştırma için dizin oluşturucu çıktısı
Bu Markdown dosyası, dizinlemeden sonra üç içerik bölümü nedeniyle üç arama belgesiyle sonuçlanır. Sağlanan Markdown belgesinin ilk içerik bölümünden elde edilen arama belgesi , , sections
h1
ve h2
için content
aşağıdaki değerleri içerir:
{
{
"content": "Content for section 1.\r\n",
"sections": {
"h1": "Section 1",
"h2": ""
},
"ordinal_position": 1
},
{
"content": "Content for subsection 1.1.\r\n",
"sections": {
"h1": "Section 1",
"h2": "Subsection 1.1"
},
"ordinal_position": 2
},
{
"content": "Content for section 2.\r\n",
"sections": {
"h1": "Section 2",
"h2": ""
},
"ordinal_position": 3
}
}
Arama dizinindeki bire çok alanları eşleme
Alan eşlemeleri, alan adlarının ve türlerinin aynı olmadığı durumlarda bir kaynak alanı hedef alanla ilişkilendirir. Ancak alan eşlemeleri, Markdown belgesinin bölümlerini eşleştirmek ve bunları arama belgesinin en üst düzey alanlarına "kaldırmak" için de kullanılabilir.
Aşağıdaki örnek bu senaryoyu göstermektedir. Genel olarak alan eşlemeleri hakkında daha fazla bilgi için bkz . alan eşlemeleri.
Aşağıdaki alanlara sahip bir arama dizini varsayın: raw_content
türünde Edm.String
, h1_header
Edm.String
ve h2_header
türünde Edm.String
. Markdown'ınızı istenen şekle eşlemek için aşağıdaki alan eşlemelerini kullanın:
"fieldMappings" : [
{ "sourceFieldName" : "/content", "targetFieldName" : "raw_content" },
{ "sourceFieldName" : "/sections/h1", "targetFieldName" : "h1_header" },
{ "sourceFieldName" : "/sections/h2", "targetFieldName" : "h2_header" },
]
Dizinde elde edilen arama belgesi aşağıdaki gibi görünür:
{
{
"raw_content": "Content for section 1.\r\n",
"h1_header": "Section 1",
"h2_header": "",
},
{
"raw_content": "Content for section 1.1.\r\n",
"h1_header": "Section 1",
"h2_header": "Subsection 1.1",
},
{
"raw_content": "Content for section 2.\r\n",
"h1_header": "Section 2",
"h2_header": "",
}
}
Bire bir ayrıştırma modunu kullanma
Bire bir ayrıştırma modunda Markdown belgesinin tamamı, özgün içeriğin hiyerarşisi ve yapısı korunarak tek bir arama belgesi olarak dizine eklenir. Bu mod en çok dizine alınacak dosyalar ortak bir yapı paylaştığında kullanışlıdır, böylece ilgili alanları aranabilir hale getirmek için dizinde bu ortak yapıyı kullanabilirsiniz.
Dizin oluşturucu tanımında öğesini olarak ayarlayın parsingMode
"markdown"
ve isteğe bağlı markdownHeaderDepth
parametresini kullanarak öbekleme için en büyük başlık derinliğini tanımlayın. Belirtilmezse, varsayılan olarak h6
olarak kullanılır ve tüm olası üst bilgi derinliklerini yakalar.
Markdown, aşağıdaki içeriği içeren arama belgelerine üst bilgiler temelinde ayrıştırılır:
document_content
: Tam Markdown metnini tek bir dize olarak içerir. Bu alan, giriş belgesinin ham bir gösterimi olarak görev görür.sections
: Markdown belgesinde bölümlerin hiyerarşik gösterimini içeren bir nesne dizisi. Her bölüm bu dizi içinde bir nesne olarak temsil edilir ve belgenin yapısını üst bilgiler ve ilgili içeriğine karşılık gelen iç içe yerleştirilmiş bir şekilde yakalar. Alan eşlemeleri aracılığıyla alan eşlemelerine, örneğin/sections/content
yola başvurarak erişilebilir. Bu dizideki nesneler aşağıdaki özelliklere sahiptir:header_level
: Markdown söz diziminde üst bilgi düzeyini (h1
,h2
,h3
vb.) gösteren dize. Bu alan, içeriğin hiyerarşisini ve yapısını anlamanıza yardımcı olur.header_name
: Markdown belgesinde göründüğü gibi üst bilgi metnini içeren bir dize. Bu alan, bölüm için bir etiket veya başlık sağlar.content
: Üst bilgiden hemen sonra gelen ve bir sonraki üst bilgiye kadar metin içeriği içeren bir dize. Bu alan, üst bilgiyle ilişkili ayrıntılı bilgileri veya açıklamayı yakalar. Doğrudan üst bilgi altında içerik yoksa, bu boş bir dizedir.ordinal_position
: Bölümün belge hiyerarşisi içindeki konumunu gösteren bir tamsayı değeri. Bu alan, 1 sıralı bir konumdan başlayarak ve her içerik bloğu için sıralı olarak artırılarak, bölümleri belgede göründükleri şekilde özgün sıralarında sıralamak için kullanılır.sections
: Geçerli bölümün altında iç içe yerleştirilmiş alt bölümleri temsil eden nesneleri içeren bir dizi. Bu dizi, üst düzeysections
diziyle aynı yapıyı izler ve birden çok iç içe içerik düzeyinin temsilini sağlar. Her alt bölüm nesnesi, Markdown içeriğini temsil eden veordinal_position
hiyerarşisini temsil eden özyinelemeli bir yapıyı etkinleştiren ,header_name
content
, ve özelliklerini de içerirheader_level
.
Her ayrıştırma modu etrafında tasarlanmış bir dizin şemasını açıklamak için şu örnek Markdown'ı kullanıyoruz.
# Section 1
Content for section 1.
## Subsection 1.1
Content for subsection 1.1.
# Section 2
Content for section 2.
Bire bir ayrıştırma için dizin şeması
Alan eşlemelerini kullanmıyorsanız, dizinin şekli Markdown içeriğinin şeklini yansıtmalıdır. Örnek Markdown'ın iki bölümü ve tek alt bölümüyle yapısı göz önünde bulundurulduğunda, dizin aşağıdaki örneğe benzer görünmelidir:
{
"name": "my-markdown-index",
"fields": [
{
"name": "document_content",
"type": "Edm.String",
{
"name": "sections",
"type": "Edm.ComplexType",
"fields": [
{
"name": "header_level",
"type": "Edm.String",
},
{
"name": "header_name",
"type": "Edm.String",
},
{
"name": "content",
"type": "Edm.String"
},
{
"name": "ordinal_position",
"type": "Edm.Int"
},
{
"name": "sections",
"type": "Edm.ComplexType",
"fields": [
{
"name": "header_level",
"type": "Edm.String",
},
{
"name": "header_name",
"type": "Edm.String",
},
{
"name": "content",
"type": "Edm.String"
},
{
"name": "ordinal_position",
"type": "Edm.Int"
}]
}]
}
}
Bire bir ayrıştırma için dizin oluşturucu tanımı
POST https://[service name].search.windows.net/indexers?api-version=2024-11-01-preview
Content-Type: application/json
api-key: [admin key]
{
"name": "my-markdown-indexer",
"dataSourceName": "my-blob-datasource",
"targetIndexName": "my-target-index",
"parameters": {
"configuration": {
"parsingMode": "markdown",
"markdownParsingSubmode": "oneToOne",
}
}
}
Bire bir ayrıştırma için dizin oluşturucu çıkışı
Dizine eklemek istediğimiz Markdown yalnızca ("##") derinliğine h2
gittiği için, bunu eşleştirmek için 2 derinliğinde iç içe yerleştirilmiş alanlara ihtiyacımız vardır sections
. Bu yapılandırma dizinde aşağıdaki verilere neden olur:
"document_content": "# Section 1\r\nContent for section 1.\r\n## Subsection 1.1\r\nContent for subsection 1.1.\r\n# Section 2\r\nContent for section 2.\r\n",
"sections": [
{
"header_level": "h1",
"header_name": "Section 1",
"content": "Content for section 1.",
"ordinal_position": 1,
"sections": [
{
"header_level": "h2",
"header_name": "Subsection 1.1",
"content": "Content for subsection 1.1.",
"ordinal_position": 2,
}]
}],
{
"header_level": "h1",
"header_name": "Section 2",
"content": "Content for section 2.",
"ordinal_position": 3,
"sections": []
}]
}
Gördüğünüz gibi sıralı konum, belgedeki içeriğin konumuna göre artar.
Ayrıca, içerikte üst bilgi düzeyleri atlanırsa, sonuçta elde edilen belgenin yapısının Markdown içeriğinde bulunan üst bilgileri yansıttığını, ardışık olarak için iç içe bölümler h1
h6
içermesi gerekmediği de belirtilmelidir. Örneğin, belge konumunda h2
başladığında, en üst düzey bölümler dizisindeki ilk öğe olur h2
.
Arama dizininde bire bir alanları eşleme
Belgeden özel adlara sahip alanları ayıklamak isterseniz, bunu yapmak için alan eşlemelerini kullanabilirsiniz. Öncekiyle aynı Markdown örneğini kullanarak aşağıdaki dizin yapılandırmasını göz önünde bulundurun:
{
"name": "my-markdown-index",
"fields": [
{
"name": "document_content",
"type": "Edm.String",
},
{
"name": "document_title",
"type": "Edm.String",
},
{
"name": "opening_subsection_title"
"type": "Edm.String",
}
{
"name": "summary_content",
"type": "Edm.String",
}
]
}
Ayrıştırılan Markdown'dan belirli alanların ayıklanması, belge yollarının outputFieldMappings içindekine benzer şekilde işlenir, ancak yol yerine /document
ile /sections
başlar. Bu nedenle, örneğin, /sections/0/content
sections dizisindeki 0 konumundaki öğenin altındaki içeriğe eşler.
Güçlü bir kullanım örneği şuna benzer olabilir: tüm Markdown dosyalarının ilkinde bir belge başlığı, ilkinde h1
h2
bir alt bölüm başlığı ve son h1
paragrafın altındaki son paragrafın içeriğinde bir özeti vardır. Yalnızca bu içeriğin dizinini oluşturmak için aşağıdaki alan eşlemelerini kullanabilirsiniz:
"fieldMappings" : [
{ "sourceFieldName" : "/content", "targetFieldName" : "raw_content" },
{ "sourceFieldName" : "/sections/0/header_name", "targetFieldName" : "document_title" },
{ "sourceFieldName" : "/sections/0/sections/header_name", "targetFieldName" : "opening_subsection_title" },
{ "sourceFieldName" : "/sections/1/content", "targetFieldName" : "summary_content" },
]
Burada, bu belgeden yalnızca ilgili parçaları ayıklayabilirsiniz. Bu işlevi en etkili şekilde kullanmak için dizine almayı planladığınız belgelerin aynı hiyerarşik üst bilgi yapısını paylaşması gerekir.
Dizinde elde edilen arama belgesi aşağıdaki gibi görünür:
{
"content": "Content for section 1.\r\n",
"document_title": "Section 1",
"opening_subsection_title": "Subsection 1.1",
"summary_content": "Content for section 2."
}
Not
Bu örnekler, bu ayrıştırma modlarının alan eşlemeleriyle veya alan eşlemeleri olmadan nasıl kullanılacağını belirtir, ancak gereksinimlerinize uygunsa her iki senaryoda da kullanabilirsiniz.