Megosztás a következőn keresztül:


Markdown-blobok és -fájlok indexelése az Azure AI Searchben

Feljegyzés

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Az Azure AI Searchben az Azure Blob Storage, az Azure Files és a OneLake indexelői támogatják markdown a Markdown-fájlok elemzési módját. A Markdown-fájlok kétféleképpen indexelhetők:

  • Egy-a-többhöz elemzési mód, több keresési dokumentum létrehozása Markdown-fájlonként
  • Egy az egyhez elemzési mód, egy keresési dokumentum létrehozása Markdown-fájlonként

Előfeltételek

  • Támogatott adatforrás: Azure Blob Storage, Azure File Storage, OneLake a Microsoft Fabricben.

    A OneLake esetében győződjön meg arról, hogy megfelel a OneLake indexelő összes követelményének.

    A blobindexelők és fájlindexelők számára készült Azure Storage egy standard teljesítményű (általános célú v2)-példány, amely támogatja a gyakori és ritka elérésű hozzáférési szinteket.

Markdown-elemzési mód paraméterei

Az elemzési mód paraméterei indexelő definícióban vannak megadva indexelő létrehozásakor vagy frissítésekor.

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"
    }
  },
}

A blobindexelő egy paramétert submode biztosít a keresési dokumentumok szerkezetének kimenetének meghatározásához. A Markdown-elemzési mód a következő almód-beállításokat biztosítja:

parsingMode almód Dokumentum keresése Leírás
markdown oneToMany Blobonként több (alapértelmezett) A Markdownt több keresési dokumentumra bontja, amelyek mindegyike a Markdown-fájl egy tartalom (nemheader) szakaszát jelöli. Kihagyhatja az almódot, hacsak nem szeretne egy-az-egyhez elemzést.
markdown oneToOne Blobonként egy A Markdownt egy keresési dokumentumba elemzi, és a szakaszokat a Markdown-fájl adott fejléceihez rendeli.

Az almappák esetében oneToMany érdemes áttekinteni egy blob indexelését, hogy több keresési dokumentumot is létrehozzon, hogy megértse, hogyan kezeli a blobindexelő a dokumentumkulcs egyértelműsítését az azonos blobból előállított több keresési dokumentum esetében.

A későbbi szakaszok részletesebben ismertetik az egyes almódokat. Ha nem ismeri az indexelő ügyfeleket és a fogalmakat, olvassa el a Keresési indexelő létrehozása című témakört. Ismernie kell az alapszintű blobindexelő konfiguráció részleteit is, amelyek itt nem ismétlődnek.

Választható Markdown-elemzési paraméterek

A paraméterek megkülönböztetik a kis- és nagybetűket.

Paraméter neve Megengedett értékek Leírás
markdownHeaderDepth h1, h2, h3, h4h5h6(default) Ez a paraméter határozza meg az elemzés során figyelembe vett legmélyebb fejlécszintet, amely lehetővé teszi a dokumentumstruktúra rugalmas kezelését (például ha markdownHeaderDepth be van állítva h1, az elemző csak a "#" kezdetű felső szintű fejléceket ismeri fel, és az összes alsó szintű fejlécet egyszerű szövegként kezeli). Ha nincs megadva, az alapértelmezés szerint a .h6

Ez a beállítás az indexelő kezdeti létrehozása után módosítható, de az eredményként kapott keresési dokumentumok struktúrája a Markdown-tartalomtól függően változhat.

Támogatott Markdown-elemek

A Markdown-elemzések csak fejlécek alapján osztják fel a tartalmat. Minden más elem, például listák, kódblokkok, táblázatok és így tovább, egyszerű szövegként lesz kezelve, és egy tartalommezőbe kerül.

Minta Markdown-tartalom

Az alábbi Markdown-tartalmakat használjuk az oldalon található példákhoz:

# Section 1
Content for section 1.

## Subsection 1.1
Content for subsection 1.1.

# Section 2
Content for section 2.

Egy-a-többhöz elemzési mód használata

Az egy-a-többhöz elemzési mód több keresési dokumentumba elemzi a Markdown-fájlokat, ahol minden dokumentum megfelel a Markdown-fájl adott tartalomszakaszának a dokumentum azon pontján található fejléc metaadatai alapján. A Markdown az alábbi tartalmat tartalmazó keresési dokumentumok fejlécei alapján lesz elemezve:

  • content: Egy adott helyen található nyers Markdownt tartalmazó sztring a dokumentum azon pontján található fejléc metaadatai alapján.

  • sections: Olyan objektum, amely a fejléc metaadatainak almezőit tartalmazza a kívánt fejlécszintig. Ha például markdownHeaderDepth be van állítva h3, sztringmezőket h1tartalmaz, h2és h3. Ezek a mezők indexelése a struktúra indexben való tükrözésével, vagy a formátumbeli /sections/h1sections/h2mezőleképezésekkel stb. történik. A környezetbeli példákért tekintse meg az indexelő és az indexelő konfigurációját az alábbi mintákban. Az almezők a következők:

    • h1 - A h1 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
    • (Nem kötelező) h2- A h2 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
    • (Nem kötelező) h3- A h3 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
    • (Nem kötelező) h4- A h4 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
    • (Nem kötelező) h5- A h5 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
    • (Nem kötelező) h6- A h6 fejlécértéket tartalmazó sztring. Üres sztring, ha a dokumentum ezen a pontján nincs beállítva.
  • ordinal_position: A szakasz dokumentumhierarchián belüli pozícióját jelző egész szám. Ez a mező arra szolgál, hogy a szakaszokat az eredeti sorrendben rendezze, ahogy azok megjelennek a dokumentumban, kezdve az 1 sorszámmal, és az egyes fejlécekhez egymás után növekvő sorrendbe.

Indexséma egy-a-többhöz elemzéshez

Egy példa indexkonfiguráció a következőképpen nézhet ki:

{
  "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"
    }]
  }]
}

Indexelődefiníció egy-a-többhöz elemzéshez

Ha a mezőnevek és az adattípusok egymáshoz igazodnak, a blobindexelő a kérelemben található explicit mezőleképezés nélkül is következtethet a leképezésre, így a megadott indexkonfigurációnak megfelelő indexelő konfiguráció a következőképpen nézhet ki:

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" }
  },
}

Feljegyzés

Itt submode nem kell explicit módon beállítani, mert oneToMany ez az alapértelmezett érték.

Indexelő kimenet egy-a-többhöz elemzéshez

Ez a Markdown-fájl három keresési dokumentumot eredményezne az indexelés után a három tartalomszakasz miatt. A megadott Markdown-dokumentum első tartalomszakaszából származó keresési dokumentum a következő értékeket contentsectionsh1h2tartalmazza:

{
  {
    "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
  }
}   

Egy-a-többhöz mezők leképezése egy keresési indexben

A mezőleképezések egy forrásmezőt társítanak egy célmezőhöz olyan helyzetekben, amikor a mezőnevek és a típusok nem azonosak. A mezőleképezések azonban a Markdown-dokumentumok részeinek egyeztetésére és a keresési dokumentum legfelső szintű mezőibe való "felemelésére" is használhatók.

Az alábbi forgatókönyv ezt a példát ábrázolja. A mezőleképezésekkel kapcsolatos általános információkért lásd a mezőleképezéseket.

Tegyük fel, hogy a keresési index a következő mezőkkel rendelkezik: raw_content típus Edm.String, h1_header típus Edm.Stringés h2_header típus Edm.String. A Markdown kívánt alakzatba való leképezéséhez használja a következő mezőleképezéseket:

"fieldMappings" : [
    { "sourceFieldName" : "/content", "targetFieldName" : "raw_content" },
    { "sourceFieldName" : "/sections/h1", "targetFieldName" : "h1_header" },
    { "sourceFieldName" : "/sections/h2", "targetFieldName" : "h2_header" },
  ]

Az eredményként kapott keresési dokumentum az indexben a következőképpen nézne ki:

{
  {
    "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": "",
  }
}

Egy az egyhez elemzési mód használata

Az egy-az-egyhez elemzési módban a teljes Markdown-dokumentum egyetlen keresési dokumentumként lesz indexelve, megőrizve az eredeti tartalom hierarchiáját és szerkezetét. Ez a mód akkor hasznos, ha az indexelendő fájlok közös struktúrát használnak, így az indexben ezt a közös struktúrát használva kereshetővé teheti a releváns mezőket.

Az indexelő definíción belül állítsa be a parsingMode "markdown" kívánt értéket, és használja az opcionális markdownHeaderDepth paramétert az adattömbhöz tartozó maximális címsormélység meghatározásához. Ha nincs megadva, az alapértelmezett beállítás az h6összes lehetséges fejlécmélység rögzítése.

A Markdown az alábbi tartalmat tartalmazó keresési dokumentumok fejlécei alapján lesz elemezve:

  • document_content: A teljes Markdown-szöveget egyetlen sztringként tartalmazza. Ez a mező nyersen jeleníti meg a bemeneti dokumentumot.

  • sections: Objektumtömb, amely a Markdown-dokumentumban lévő szakaszok hierarchikus ábrázolását tartalmazza. Minden szakasz objektumként jelenik meg ebben a tömbben, és beágyazott módon rögzíti a dokumentum struktúráját az élőfejeknek és azok tartalmának megfelelően. A mezők a mezőleképezéseken keresztül érhetők el, például /sections/contentaz elérési útra való hivatkozással. A tömb objektumai a következő tulajdonságokkal rendelkeznek:

    • header_level: Egy sztring, amely a Markdown szintaxis fejlécének (h1, h2, stb h3.) szintjét jelzi. Ez a mező segít megérteni a tartalom hierarchiáját és szerkezetét.

    • header_name: A Markdown-dokumentumban megjelenő fejléc szövegét tartalmazó sztring. Ez a mező a szakasz címkéjét vagy címét tartalmazza.

    • content: Szöveges tartalmat tartalmazó sztring, amely azonnal követi a fejlécet, egészen a következő fejlécig. Ez a mező a fejléchez tartozó részletes információkat vagy leírásokat rögzíti. Ha nincs közvetlenül a fejléc alatt tartalom, ez egy üres sztring.

    • ordinal_position: A szakasz dokumentumhierarchián belüli pozícióját jelző egész szám. Ez a mező arra szolgál, hogy az eredeti sorrendben rendezze a szakaszokat, ahogy azok megjelennek a dokumentumban, kezdve az 1 sorszámmal és az egyes tartalomblokkok sorrendjének növelésével.

    • sections: Az aktuális szakasz alá beágyazott alszakaszokat képviselő objektumokat tartalmazó tömb. Ez a tömb ugyanazt a struktúrát követi, mint a legfelső szintű sections tömb, amely lehetővé teszi a beágyazott tartalom több szintjének megjelenítését. Minden alszakasz-objektum tartalmaz header_level, header_name, contentés ordinal_position tulajdonságokat is, amelyek lehetővé teszik a Markdown-tartalom rekurzív szerkezetét és hierarchiáját.

Az alábbi Markdown-minta segítségével ismertetjük az egyes elemzési módok köré tervezett indexsémát.

# Section 1
Content for section 1.

## Subsection 1.1
Content for subsection 1.1.

# Section 2
Content for section 2.

Indexséma az egy-az-egyhez elemzéshez

Ha nem használ mezőleképezéseket, az index alakjának tükröznie kell a Markdown-tartalom alakját. Tekintettel a Markdown minta két szakaszára és egyetlen alszakaszára, az indexnek az alábbi példához hasonlóan kell kinéznie:

{
  "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"
      }]
    }]
  }
}

Indexelődefiníció az egy-az-egyhez elemzéshez

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",
    }
  }
}

Indexelő kimenet az egy-az-egyhez elemzéshez

Mivel az indexelni kívánt Markdown csak a ("##" mélységbe h2 kerül), 2 mélységbe ágyazott mezőkre van szükségünk sections , hogy megegyezzünk ezzel. Ez a konfiguráció a következő adatokat eredményezné az indexben:

  "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": []
    }]
  }

Mint látható, a sorszám a dokumentumon belüli tartalom helye alapján növekszik.

Azt is meg kell jegyezni, hogy ha a fejlécszintek kimaradnak a tartalomból, akkor az eredményül kapott dokumentum struktúrája a Markdown-tartalomban található fejléceket tükrözi, nem feltétlenül egymás után beágyazott szakaszokat h1 h6 . Ha például a dokumentum a következő időpontban h2kezdődik, akkor a legfelső szintű szakaszok tömbjének első eleme a következő h2.

Egy-az-egyhez mezők leképezése keresési indexben

Ha egyéni neveket tartalmazó mezőket szeretne kinyerni a dokumentumból, a mezőleképezések használatával teheti meg. Az előzővel megegyező Markdown-mintát használva vegye figyelembe az alábbi indexkonfigurációt:

{
  "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",
    }
  ]
}

Az elemzett Markdown adott mezőinek kinyerése ugyanúgy történik, mint a dokumentum elérési útjai az outputFieldMappings fájlban, kivéve, hogy az elérési út ahelyett /documentkezdődik/sections. Így például /sections/0/content a szakaszok tömbjének 0. helyén lévő elem alatti tartalomra képezne le.

Egy erős használati eset például így nézhet ki: az összes Markdown-fájlnak van egy dokumentumcíme az elsőben h1, egy alszakaszcím az elsőben h2, és egy összegzés az utolsó bekezdés tartalmában az utolsó h1alatt. A következő mezőleképezésekkel csak az adott tartalmat indexelheti:

"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" },
]

Itt csak a dokumentum releváns részeit nyerheti ki. A funkció leghatékonyabb használatához az indexelni kívánt dokumentumoknak ugyanazzal a hierarchikus fejlécstruktúrával kell rendelkeznie.

Az eredményként kapott keresési dokumentum az indexben a következőképpen nézne ki:

{
  "content": "Content for section 1.\r\n",
  "document_title": "Section 1",
  "opening_subsection_title": "Subsection 1.1",
  "summary_content": "Content for section 2."
}

Feljegyzés

Ezek a példák azt adják meg, hogyan használhatja ezeket az elemzési módokat teljesen mezőleképezésekkel vagy anélkül, de mindkettőt használhatja egy forgatókönyvben, ha az megfelel az igényeinek.

Következő lépések