Indexování objektů blob JSON a souborů ve službě Azure AI Search

Platí pro: Indexery objektů blob, indexery souborů

V případě indexování objektů blob ve službě Azure AI Search se v tomto článku dozvíte, jak nastavit vlastnosti objektů blob nebo souborů, které se skládají z dokumentů JSON. Soubory JSON ve službě Azure Blob Storage nebo Azure Files obvykle předpokládají některé z těchto formulářů:

  • Jeden dokument JSON
  • Dokument JSON obsahující pole dobře formátovaných elementů JSON
  • Dokument JSON obsahující více entit oddělených novým řádekem

Indexer objektů blob poskytuje parsingMode parametr pro optimalizaci výstupu vyhledávacího dokumentu na základě struktury JSON. Režimy analýzy se skládají z následujících možností:

parsingMode Dokument JSON Popis
json Jeden na objekt blob (výchozí) Parsuje objekty blob JSON jako jeden blok textu. Každý objekt blob JSON se stane jedním vyhledávacím dokumentem.
jsonArray Více objektů blob na objekt blob Parsuje pole JSON v objektu blob, kde každý prvek pole se stane samostatným vyhledávacím dokumentem.
jsonLines Více objektů blob na objekt blob Parsuje objekt blob, který obsahuje více entit JSON (také pole), s jednotlivými prvky oddělenými novým řádekem. Indexer spustí nový vyhledávací dokument za každým novým řádkem.

V případě obou jsonArray objektů jsonLinesblob byste měli zkontrolovat indexování jednoho objektu blob, abyste pochopili, jak indexer objektů blob zpracovává nejednoznačnost klíče dokumentu pro více prohledávacích dokumentů vytvořených ze stejného objektu blob.

V definici indexeru můžete volitelně nastavit mapování polí a zvolit, které vlastnosti zdrojového dokumentu JSON se použijí k naplnění cílového indexu vyhledávání. Pokud například používáte jsonArray režim analýzy, pokud pole existuje jako vlastnost nižší úrovně, můžete nastavit vlastnost documentRoot označující, kde je pole umístěné v objektu blob.

Poznámka:

Při použití režimu analýzy JSON služba Azure AI Search předpokládá, že všechny objekty blob používají stejný analyzátor (buď pro json, jsonArray nebo jsonLines). Pokud máte ve stejném zdroji dat kombinaci různých typů souborů, zvažte použití filtrů přípon souborů k řízení importovaných souborů.

Následující části popisují jednotlivé režimy podrobněji. Pokud neznáte klienty a koncepty indexeru, přečtěte si téma Vytvoření indexeru vyhledávání. Měli byste být také obeznámeni s podrobnostmi základní konfigurace indexeru objektů blob, která se zde neopakuje.

Indexování jednoho dokumentu JSON (jeden na objekt blob)

Ve výchozím nastavení indexery objektů blob parsují objekty blob JSON jako jeden blok textu, jeden prohledávací dokument pro každý objekt blob v kontejneru. Pokud je JSON strukturovaný, může vyhledávací dokument tuto strukturu odrážet s jednotlivými prvky reprezentovanými jako jednotlivá pole. Předpokládejme například, že máte v Azure Blob Storage následující dokument JSON:

{
    "article" : {
        "text" : "A hopefully useful article explaining how to parse JSON blobs",
        "datePublished" : "2020-04-13",
        "tags" : [ "search", "storage", "howto" ]    
    }
}

Indexer objektů blob parsuje dokument JSON do jednoho prohledávacího dokumentu, načte index podle shody "text", "datePublished" a "tags" ze zdroje shodně pojmenovanými a zadanými cílovými poli indexu. Vzhledem k indexu s poli "text", "datePublished a tags" může indexer objektů blob odvodit správné mapování bez mapování polí, které je přítomné v požadavku.

I když je výchozím chováním jeden vyhledávací dokument na objekt blob JSON, nastavení json režimu analýzy změní mapování interních polí pro obsah a zvýšení úrovně polí uvnitř content na skutečná pole v indexu vyhledávání. Příklad definice indexeru json pro režim analýzy může vypadat takto:

POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-json-indexer",
    "dataSourceName" : "my-blob-datasource",
    "targetIndexName" : "my-target-index",
    "parameters" : { "configuration" : { "parsingMode" : "json" } }
}

Příklad json (soubory JSON jednoho hotelu)

Sada dat dokumentu JSON hotelu na GitHubu je užitečná pro testování analýzy JSON, kde každý objekt blob představuje strukturovaný soubor JSON. Datové soubory můžete nahrát do služby Blob Storage a pomocí průvodce importem dat rychle vyhodnotit, jak se tento obsah analyzuje do jednotlivých vyhledávacích dokumentů.

Datová sada se skládá z pěti objektů blob, z nichž každý obsahuje hotelový dokument s kolekcí adres a kolekcí místností. Indexer objektů blob detekuje jak kolekce, tak odráží strukturu vstupních dokumentů ve schématu indexu.

Analýza polí JSON

Alternativně můžete použít možnost pole JSON. Tato možnost je užitečná, když objekty blob obsahují pole dobře formátovaných objektů JSON a chcete, aby se každý prvek stal samostatným vyhledávacím dokumentem. Následující jsonArraysobjekt blob JSON vytvoří tři samostatné dokumenty, z nichž každý obsahuje "id" pole a "text" pole.

[
    { "id" : "1", "text" : "example 1" },
    { "id" : "2", "text" : "example 2" },
    { "id" : "3", "text" : "example 3" }
]

parameters Vlastnost indexeru obsahuje hodnoty režimu analýzy. V případě pole JSON by definice indexeru měla vypadat podobně jako v následujícím příkladu.

POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-json-indexer",
    "dataSourceName" : "my-blob-datasource",
    "targetIndexName" : "my-target-index",
    "parameters" : { "configuration" : { "parsingMode" : "jsonArray" } }
}

JsonArrays – příklad

Sada dat JSON v New Yorku na GitHubu je užitečná pro testování analýzy polí JSON. Datové soubory můžete nahrát do úložiště objektů blob a pomocí průvodce importem dat rychle vyhodnotit, jak se tento obsah analyzuje do jednotlivých vyhledávacích dokumentů.

Datová sada se skládá z osmi objektů blob, z nichž každý obsahuje pole entit JSON pro celkem 100 entit. Entity se liší podle toho, která pole jsou naplněna, ale konečným výsledkem je jeden vyhledávací dokument pro každou entitu ze všech polí ve všech objektech blob.

Analýza vnořených polí JSON

U polí JSON s vnořenými elementy můžete zadat documentRoot , že se má označit struktura s více úrovněmi. Pokud například objekty blob vypadají takto:

{
    "level1" : {
        "level2" : [
            { "id" : "1", "text" : "Use the documentRoot property" },
            { "id" : "2", "text" : "to pluck the array you want to index" },
            { "id" : "3", "text" : "even if it's nested inside the document" }  
        ]
    }
}

Pomocí této konfigurace indexujte pole obsažené ve level2 vlastnosti:

{
    "name" : "my-json-array-indexer",
    ... other indexer properties
    "parameters" : { "configuration" : { "parsingMode" : "jsonArray", "documentRoot" : "/level1/level2" } }
}

Parsování entit JSON oddělených novými spojnicemi

Pokud objekt blob obsahuje více entit JSON oddělených novým řádekem a chcete, aby se každý prvek stal samostatným vyhledávacím dokumentem, použijte jsonLines.

{ "id" : "1", "text" : "example 1" }
{ "id" : "2", "text" : "example 2" }
{ "id" : "3", "text" : "example 3" }

U řádků JSON by definice indexeru měla vypadat podobně jako v následujícím příkladu.

POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
Content-Type: application/json
api-key: [admin key]

{
    "name" : "my-json-indexer",
    "dataSourceName" : "my-blob-datasource",
    "targetIndexName" : "my-target-index",
    "parameters" : { "configuration" : { "parsingMode" : "jsonLines" } }
}

Mapování polí JSON na vyhledávací pole

Mapování polí přidruží zdrojové pole k cílovému poli v situacích, kdy názvy a typy polí nejsou identické. Mapování polí se ale dá použít také ke shodě částí dokumentu JSON a jejich "lift" do polí nejvyšší úrovně hledaného dokumentu.

Ilustruje to následující vzorový scénář. Další informace o mapování polí obecně naleznete v tématu mapování polí.

{
    "article" : {
        "text" : "A hopefully useful article explaining how to parse JSON blobs",
        "datePublished" : "2016-04-13"
        "tags" : [ "search", "storage", "howto" ]    
    }
}

Předpokládejme index vyhledávání s následujícími poli: text typu Edm.String, date typu Edm.DateTimeOffseta tags typu Collection(Edm.String). Všimněte si nesrovnalostí mezi datePublished ve zdroji a date poli v indexu. Pokud chcete namapovat JSON na požadovaný obrazec, použijte následující mapování polí:

"fieldMappings" : [
    { "sourceFieldName" : "/article/text", "targetFieldName" : "text" },
    { "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" },
    { "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" }
    ]

Zdrojová pole se zadají pomocí zápisu ukazatele JSON. Začnete lomítkem, který odkazuje na kořen dokumentu JSON, a pak vyberete požadovanou vlastnost (na libovolné úrovni vnoření) pomocí cesty oddělené lomítkem.

Můžete také odkazovat na jednotlivé prvky pole pomocí indexu založeného na nule. Pokud chcete například vybrat první prvek pole "tags" z výše uvedeného příkladu, použijte mapování polí takto:

{ "sourceFieldName" : "/article/tags/0", "targetFieldName" : "firstTag" }

Poznámka:

Pokud "sourceFieldName" odkazuje na vlastnost, která v objektu blob JSON neexistuje, toto mapování se vynechá bez chyby. Toto chování umožňuje indexování pokračovat pro objekty blob JSON, které mají jiné schéma (což je běžný případ použití). Vzhledem k tomu, že neexistuje žádná kontrola ověření, zkontrolujte mapování pečlivě a zkontrolujte překlepy, abyste neztratili dokumenty z nesprávného důvodu.

Další kroky