Mapování rozšířeného výstupu na pole v indexu vyhledávání v Azure Cognitive Search

Fáze indexeru indexeru

Tento článek vysvětluje, jak nastavit mapování výstupních polí , která určují cestu k datům mezi datovými strukturami v paměti vytvořenými během zpracování dovedností a cílovými poli v indexu vyhledávání. Mapování výstupních polí 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 definice mapuje data 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 ve vyhledávacím indexu, budete muset indexeru sdělit, kde se mají data odesílat.

Mapování výstupních polí lze použít také k načtení konkrétních uzlů v komplexním typu zdrojového dokumentu. Můžete například chtít jenom "FullName/LastName" ve vlastnosti "FullName" (Celé jméno nebo příjmení). Pokud nepotřebujete úplnou složitou strukturu, můžete zploštět jednotlivé uzly v 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 hledání Pokud naplníte úložiště znalostí, použijte projekce pro konfiguraci cesty k datům .

Mapování výstupních polí se použijí po spuštění sady dovedností nebo po prolomení dokumentu, pokud neexistuje žádná 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 fieldMappings polem. Mapování výstupních polí 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á hodnota. Určuje cestu k rozšířenému obsahu. Příkladem může být /document/content. Projděte si referenční poznámky v sadě dovedností Azure Cognitive Search pro syntaxi cest a příklady.
targetFieldName Nepovinný parametr. Určuje vyhledávací pole, které přijímá obohacený obsah. Cílová pole musí být jednoduchá pole nebo kolekce nejvyšší úrovně. Nemůže to být cesta k dílčímu poli v komplexním typu. Pokud chcete načíst konkrétní uzly v komplexní struktuře, můžete zploštět jednotlivé uzly v paměti a pak odeslat výstup do kolekce řetězců ve vašem indexu.
mapFunction Nepovinný parametr. Přidá další zpracování poskytované funkcemi mapování podporovanými indexery. V případě uzlů rozšiřování, kódování a dekódování jsou nejčastěji používané funkce.

Pomocí rozhraní REST API nebo sady Azure SDK můžete definovat mapování výstupních polí.

Tip

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

Použijte příkaz Create Indexer (REST) 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 podle odkazu v indexu (targetFieldName). Před uložením do indexu přiřaďte všechny funkce mapování , které potřebujete k transformaci obsahu pole.

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

Pokud se zdrojová data skládají z vnořených nebo hierarchických JSON, nemůžete k nastavení datových cest použít mapování polí. Místo toho musí index vyhledávání zrcadlit zdrojovou strukturu 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 chcete plně indexovat výše uvedený zdrojový dokument, vytvořte definici indexu, ve které se názvy polí, úrovně a typy projeví jako složitý typ. Vzhledem k tomu, že mapování polí nejsou podporována pro komplexní typy v indexu vyhledávání, musí definice indexu 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á provede import (všimněte si, že neexistují žádná mapování polí a 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í vykreslování v indexu vyhledávání je zploštět jednotlivé uzly ve zdrojové struktuře vnořené struktury do kolekce řetězců v indexu vyhledávání.

K provedení tohoto úkolu budete potřebovat outputFieldMapping , 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 použít také k řešení 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 ve službě Cognitive Search 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 definice ukázkového indexeru, která používá outputFieldMappings k přidružení vnořeného kódu 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 se vytvářejí v systému během prolomení dokumentů, což znamená, že můžete přistupovat k uzlům v každém stromu dokumentů, pokud tyto uzly existují, když je dokument prasknut.

{
  "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ž neexistuje žá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é