Aracılığıyla paylaş


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ığında h3, ve h3dize alanlarını h1h2içerir. Bu alanlar, dizindeki bu yapıyı yansıtarak veya , vb sections/h2biçimindeki /sections/h1alan 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 , , sectionsh1ve h2için contentaş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.Stringve 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 h6olarak 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/contentyola başvurarak erişilebilir. Bu dizideki nesneler aşağıdaki özelliklere sahiptir:

    • header_level: Markdown söz diziminde üst bilgi düzeyini (h1, h2, h3vb.) 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üzey sections 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 ve ordinal_position hiyerarşisini temsil eden özyinelemeli bir yapıyı etkinleştiren , header_namecontent, 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 h2baş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 /documentile /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 h1h2bir alt bölüm başlığı ve son h1paragrafı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.

Sonraki adımlar