Mapování rozšířeného výstupu na pole v indexu vyhledávání ve službě Azure AI Search

Fáze indexeru

Tento článek vysvětluje, jak nastavit mapování výstupních polí, definovat cestu k datům mezi strukturami dat v paměti vytvořenými během zpracování sady dovedností a cílovými poli v indexu vyhledávání. Mapování výstupního pole je definováno v indexeru a má následující prvky:

"outputFieldMappings": [
  {
    "sourceFieldName": "document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],

Na rozdíl od fieldMappings definice, která mapuje cestu mezi dvěma fyzickými datovými strukturami, outputFieldMappings mapuje definice rozšiřování v paměti na pole v indexu vyhledávání.

Mapování výstupních polí se vyžaduje, pokud má váš indexer připojenou sadu dovedností, která vytváří nové informace, jako je překlad textu nebo extrakce klíčových frází. Během provádění indexeru existují informace generované AI pouze v paměti. Pokud chcete tyto informace zachovat v indexu vyhledávání, budete muset indexeru sdělit, kam se mají data odesílat.

Mapování výstupních polí lze také použít k načtení konkrétních uzlů v komplexním typu zdrojového dokumentu. Například můžete chtít jen "FullName/LastName" ve vícedílné "FullName" vlastnost. Pokud nepotřebujete úplnou složitou strukturu, můžete zploštět jednotlivé uzly ve vnořených datových strukturách a pak pomocí mapování výstupního pole odeslat výstup do kolekce řetězců ve vyhledávacím indexu.

Mapování výstupních polí platí pro:

  • Obsah v paměti vytvořený dovednostmi nebo extrahovaný indexerem Zdrojové pole je uzel v rozšířeném stromu dokumentů.

  • Indexy vyhledávání Pokud naplňujete úložiště znalostí, použijte projekce pro konfiguraci cesty k datům . Pokud naplňujete vektorová pole, mapování výstupních polí se nepoužívá.

Mapování výstupních polí se použijí po spuštění sady dovedností nebo po prolomení dokumentu, pokud neexistuje přidružená sada dovedností.

Definování mapování výstupních polí

Mapování výstupních polí se přidají do outputFieldMappings pole v definici indexeru, obvykle umístěné za polem fieldMappings . Mapování výstupního pole se skládá ze tří částí.

"fieldMappings": []
"outputFieldMappings": [
  {
    "sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],
Vlastnost Popis
sourceFieldName Povinný: Určuje cestu k rozšířenému obsahu. Příkladem může být /document/content. Informace o syntaxi a příkladech najdete v referenční sadě dovedností azure AI Search.
targetFieldName Nepovinné. Určuje vyhledávací pole, které přijímá obohacený obsah. Cílová pole musí být jednoduchá pole nejvyšší úrovně nebo kolekce. Nemůže to být cesta k dílčímu poli v komplexním typu. Pokud chcete načíst konkrétní uzly ve složité struktuře, můžete zploštět jednotlivé uzly v paměti a pak odeslat výstup do kolekce řetězců v indexu.
mappingFunction Nepovinné. Přidá dodatečné zpracování poskytované funkcemi mapování podporovanými indexery. Pro uzly rozšiřování jsou nejčastěji používané funkce kódování a dekódování.

K definování mapování výstupních polí můžete použít rozhraní REST API nebo sadu Azure SDK.

Tip

Indexery vytvořené průvodcem importem dat zahrnují mapování výstupních polí vygenerovaných průvodcem. Pokud potřebujete příklady, spusťte průvodce přes zdroj dat a zobrazte vykreslenou definici.

Použijte rozhraní REST (Create Indexer) nebo Update Indexer (REST) a libovolnou verzi rozhraní API.

Tento příklad přidá entity a popisky mínění extrahované z vlastnosti obsahu objektu blob do polí v indexu vyhledávání.

PUT https://[service name].search.windows.net/indexers/myindexer?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
    "name": "myIndexer",
    "dataSourceName": "myDataSource",
    "targetIndexName": "myIndex",
    "skillsetName": "myFirstSkillSet",
    "fieldMappings": [],
    "outputFieldMappings": [
        {
            "sourceFieldName": "/document/content/organizations/*/description",
            "targetFieldName": "descriptions",
            "mappingFunction": {
                "name": "base64Decode"
            }
        },
        {
            "sourceFieldName": "/document/content/organizations",
            "targetFieldName": "orgNames"
        },
        {
            "sourceFieldName": "/document/content/sentiment",
            "targetFieldName": "sentiment"
        }
    ]
}

Pro každé mapování výstupních polí nastavte umístění dat ve stromu rozšířeného dokumentu (sourceFieldName) a název pole, na který odkazuje index (targetFieldName). Před uložením do indexu přiřaďte všechny funkce mapování potřebné k transformaci obsahu pole.

Zploštění složitých struktur do kolekce řetězců

Pokud se zdrojová data skládají z vnořeného nebo hierarchického FORMÁTU JSON, nemůžete k nastavení datových cest použít mapování polí. Místo toho musí index vyhledávání zrcadlit strukturu zdrojových dat pro každou úroveň pro úplný import.

Tato část vás provede procesem importu, který vytvoří odraz komplexního dokumentu na zdrojové i cílové straně. Dále používá stejný zdrojový dokument k ilustraci načítání a zploštění jednotlivých uzlů do kolekcí řetězců.

Tady je příklad dokumentu ve službě Azure Cosmos DB s vnořeným kódem JSON:

{
   "palette":"primary colors",
   "colors":[
      {
         "name":"blue",
         "medium":[
            "acrylic",
            "oil",
            "pastel"
         ]
      },
      {
         "name":"red",
         "medium":[
            "acrylic",
            "pastel",
            "watercolor"
         ]
      },
      {
         "name":"yellow",
         "medium":[
            "acrylic",
            "watercolor"
         ]
      }
   ]
}

Pokud byste chtěli plně indexovat výše uvedený zdrojový dokument, vytvořili byste definici indexu, ve které se názvy polí, úrovně a typy projeví jako složitý typ. Protože mapování polí nejsou podporována pro komplexní typy v indexu vyhledávání, definice indexu musí zrcadlit zdrojový dokument.

{
  "name": "my-test-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true},
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "colors", "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "name",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "medium",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "retrievable": true,
        }
      ]
    }
  ]
}

Tady je ukázková definice indexeru, která spustí import (všimněte si, že neexistují žádná mapování polí a žádná sada dovedností).

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-test-index",

  "fieldMappings": [],
  "outputFieldMappings": []
}

Výsledkem je následující ukázkový vyhledávací dokument podobný původnímu dokumentu ve službě Azure Cosmos DB.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "colors": [
        {
          "name": "blue",
          "medium": [
            "acrylic",
            "oil",
            "pastel"
          ]
        },
        {
          "name": "red",
          "medium": [
            "acrylic",
            "pastel",
            "watercolor"
          ]
        },
        {
          "name": "yellow",
          "medium": [
            "acrylic",
            "watercolor"
          ]
        }
      ]
    }
  ]
}

Alternativním vykreslováním v indexu vyhledávání je zploštět jednotlivé uzly ve zdrojové struktuře vnořené do kolekce řetězců v indexu vyhledávání.

K provedení tohoto úkolu budete potřebovat outputFieldMappings , aby se uzel v paměti mapuje na kolekci řetězců v indexu. I když mapování výstupních polí primárně platí pro výstupy dovedností, můžete je také použít k adresování uzlů po "prolomení dokumentu" , kde indexer otevře zdrojový dokument a přečte ho do paměti.

Níže je ukázková definice indexu s využitím kolekcí řetězců pro příjem zploštěného výstupu:

{
  "name": "my-new-flattened-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true },
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "color_names", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true },
    { "name": "color_mediums", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true}
  ]
}

Tady je ukázková definice indexeru, která používá outputFieldMappings k přidružení vnořeného JSON k polím kolekce řetězců. Všimněte si, že zdrojové pole používá syntaxi cesty pro uzly rozšiřování, i když neexistuje žádná sada dovedností. Rozšířené dokumenty jsou vytvořeny v systému během prolomení dokumentu, což znamená, že můžete přistupovat k uzlům v každém stromu dokumentů, pokud tyto uzly existují, když je dokument prasklý.

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-new-flattened-index",
  "parameters": {  },
  "fieldMappings": [   ],
  "outputFieldMappings": [
    {
       "sourceFieldName": "/document/colors/*/name",
       "targetFieldName": "color_names"
    },
    {
       "sourceFieldName": "/document/colors/*/medium",
       "targetFieldName": "color_mediums"
    }
  ]
}

Výsledky z výše uvedené definice jsou následující. Zjednodušení struktury v tomto případě ztratí kontext. Mezi danou barvou a médium, ve které je dostupná, už neexistují žádná přidružení. V závislosti na vašem scénáři ale může být výsledek podobný následujícímu výsledku přesně to, co potřebujete.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "color_names": [
        "blue",
        "red",
        "yellow"
      ],
      "color_mediums": [
        "[\"acrylic\",\"oil\",\"pastel\"]",
        "[\"acrylic\",\"pastel\",\"watercolor\"]",
        "[\"acrylic\",\"watercolor\"]"
      ]
    }
  ]
}

Viz také