Azure Bilişsel Arama blob Dizin Oluşturucu kullanarak JSON bloblarını dizin oluşturmaHow to index JSON blobs using a Blob indexer in Azure Cognitive Search

Bu makalede, Azure Blob depolama alanındaki JSON belgelerinden yapılandırılmış içeriği ayıklamak üzere bir Azure Bilişsel Arama blob dizin oluşturucunun nasıl yapılandırılacağı ve Azure bilişsel arama 'de aranabilir hale getirme gösterilmektedir.This article shows you how to configure an Azure Cognitive Search blob indexer to extract structured content from JSON documents in Azure Blob storage and make it searchable in Azure Cognitive Search. Bu iş akışı bir Azure Bilişsel Arama dizini oluşturur ve bunu JSON Bloblarından ayıklanan varolan metinle yükler.This workflow creates an Azure Cognitive Search index and loads it with existing text extracted from JSON blobs.

JSON içeriğini indekslemek için Portal, REST API 'leriveya .NET SDK 'sını kullanabilirsiniz.You can use the portal, REST APIs, or .NET SDK to index JSON content. Tüm yaklaşımlardan ortak, JSON belgelerinin bir Azure depolama hesabındaki blob kapsayıcısında yer aldığı bir kapsayıcıdır.Common to all approaches is that JSON documents are located in a blob container in an Azure Storage account. JSON belgelerini diğer Azure olmayan platformlardan iletme hakkında yönergeler için bkz. azure bilişsel arama 'Da veri alma.For guidance on pushing JSON documents from other non-Azure platforms, see Data import in Azure Cognitive Search.

Azure Blob depolamada JSON blob 'ları genellikle tek bir JSON belgesi (ayrıştırma modu json) veya bir JSON varlıkları koleksiyonu olur.JSON blobs in Azure Blob storage are typically either a single JSON document (parsing mode is json) or a collection of JSON entities. Koleksiyonlar için, blob düzgün biçimlendirilmiş bir JSON öğeleri dizisine sahip olabilir (ayrıştırma modu jsonArray).For collections, the blob could have an array of well-formed JSON elements (parsing mode is jsonArray). Blob 'lar aynı zamanda bir yeni satır tarafından ayrılan birden çok bağımsız JSON varlıklarından da oluşabilir (ayrıştırma modu jsonLines).Blobs could also be composed of multiple individual JSON entities separated by a newline (parsing mode is jsonLines). İstekteki Parsingmode parametresi, çıkış yapılarını belirler.The parsingMode parameter on the request determines the output structures.

Not

Tek bir Blobun birden çok arama belgesini dizine alma hakkında daha fazla bilgi için bkz. bire çok dizin oluşturma.For more information about indexing multiple search documents from a single blob, see One-to-many indexing.

Portalı kullanmaUse the portal

JSON belgelerini dizinlemek için en kolay yöntem Azure Portalbir Sihirbazı kullanmaktır.The easiest method for indexing JSON documents is to use a wizard in the Azure portal. Azure Blob kapsayıcısında meta verileri ayrıştırarak, verileri Içeri aktarma Sihirbazı varsayılan bir dizin oluşturabilir, kaynak alanları hedef dizin alanlarıyla eşleyebilir ve dizini tek bir işlemde yükleyebilir.By parsing metadata in the Azure blob container, the Import data wizard can create a default index, map source fields to target index fields, and load the index in a single operation. Kaynak verilerin boyutuna ve karmaşıklığına bağlı olarak, dakikalar içinde işlemsel bir tam metin arama dizinine sahip olabilirsiniz.Depending on the size and complexity of source data, you could have an operational full text search index in minutes.

Aynı bölgede, tercihen Azure Bilişsel Arama ve Azure depolama için aynı Azure aboneliğini kullanmanızı öneririz.We recommend using the same Azure subscription for both Azure Cognitive Search and Azure storage, preferably in the same region.

1-kaynak verileri hazırlama1 - Prepare source data

Azure Portal oturum açın ve verilerinizi Içerecek bir blob kapsayıcısı oluşturun .Sign in to the Azure portal and create a Blob container to contain your data. Genel erişim düzeyi geçerli değerlerinden herhangi birine ayarlanabilir.The Public Access Level can be set to any of its valid values.

Veri alma Sihirbazı 'nda verilerinizi almak için depolama hesabı adı, kapsayıcı adı ve erişim anahtarı gerekir.You will need the storage account name, container name, and an access key to retrieve your data in the Import data wizard.

2-veri alma Sihirbazı 'nı başlatma2 - Start Import data wizard

Arama hizmetinizin Genel Bakış sayfasında Sihirbazı komut çubuğundan başlatabilirsiniz .In the Overview page of your search service, you can start the wizard from the command bar.

Portalda verileri içeri aktar komutuImport data command in portal

3-veri kaynağını ayarlama3 - Set the data source

Veri kaynağı sayfasında, kaynak Azure Blob depolamaolmalıdır ve aşağıdaki belirtimlerle:In the data source page, the source must be Azure Blob Storage, with the following specifications:

  • Ayıklanacak veriler içerik ve meta veriolmalıdır.Data to extract should be Content and metadata. Bu seçeneğin belirlenmesi, sihirbazın bir dizin şemasını çıkarmasını ve içeri aktarma için alanları eşlemenizi sağlar.Choosing this option allows the wizard to infer an index schema and map the fields for import.

  • Ayrıştırma modu JSON, JSON dizisi veya JSON satırlarıolarak ayarlanmalıdır.Parsing mode should be set to JSON, JSON array or JSON lines.

    JSON , her Blobun arama sonuçlarında bağımsız bir öğe olarak göstererek tek bir arama belgesi olarak ifade edin.JSON articulates each blob as a single search document, showing up as an independent item in search results.

    JSON dizisi , ıyı biçimlendirilmiş JSON verileri içeren bloblara yöneliktir; ıyı biçimlendirilmiş JSON bir nesne dizisine karşılık gelir veya bir nesne dizisi olan bir özelliğine sahiptir ve her öğenin tek başına, bağımsız arama belgesi olarak ifade olmasını istiyorsunuz.JSON array is for blobs that contain well-formed JSON data - the well-formed JSON corresponds to an array of objects, or has a property which is an array of objects and you want each element to be articulated as a standalone, independent search document. Blob 'lar karmaşıktır ve JSON dizisi ' ni seçmezseniz blob 'un tamamı tek bir belge olarak alınır.If blobs are complex, and you don't choose JSON array the entire blob is ingested as a single document.

    JSON satırları , her varlığın tek başına bağımsız bir arama belgesi olarak ifade olmasını istediğiniz yeni bir satırla ayrılmış bırden çok JSON varlığında oluşan bloblara yöneliktir.JSON lines is for blobs composed of multiple JSON entities separated by a new-line, where you want each entity to be articulated as a standalone independent search document. Blob 'lar karmaşıktır ve JSON satırları ayrıştırma modunu seçmezseniz, tüm blob tek bir belge olarak alınır.If blobs are complex, and you don't choose JSON lines parsing mode, then the entire blob is ingested as a single document.

  • Depolama kapsayıcısı , depolama hesabınızı ve kapsayıcınızı ya da kapsayıcıya çözümlenen bir bağlantı dizesini belirtmelidir.Storage container must specify your storage account and container, or a connection string that resolves to the container. Blob hizmeti portalı sayfasında bağlantı dizelerini alabilirsiniz.You can get connection strings on the Blob service portal page.

    Blob veri kaynağı tanımı

4-sihirbazdaki "zenginleştirme içerik" sayfasını atlayın4 - Skip the "Enrich content" page in the wizard

Bilişsel yetenekler (veya zenginleştirme) eklemek bir içeri aktarma gereksinimi değildir.Adding cognitive skills (or enrichment) is not an import requirement. Dizin oluşturma işlem hattınızda AI zenginleştirme eklemek için özel bir ihtiyacınız yoksa bu adımı atlamanız gerekir.Unless you have a specific need to add AI enrichment to your indexing pipeline, you should skip this step.

Adımı atlamak için, "Ileri" ve "atla" için sayfanın altındaki mavi düğmelere tıklayın.To skip the step, click the blue buttons at the bottom of the page for "Next" and "Skip".

5-dizin özniteliklerini ayarla5 - Set index attributes

Dizin sayfasında, bir veri türü ve Dizin özniteliklerini ayarlamaya yönelik bir dizi onay kutusu içeren alanların listesini görmeniz gerekir.In the Index page, you should see a list of fields with a data type and a series of checkboxes for setting index attributes. Sihirbaz meta verileri temel alan ve kaynak verileri örnekleyerek bir alanlar listesi oluşturabilir.The wizard can generate a fields list based on metadata and by sampling the source data.

Öznitelik sütununun en üstündeki onay kutusuna tıklayarak öznitelikleri toplu olarak seçebilirsiniz.You can bulk-select attributes by clicking the checkbox at the top of an attribute column. Bir istemci uygulamasına döndürülmesi gereken her alan için alınabilir ve aranabilir ' i seçin ve tam metin arama işlemesine tabidir.Choose Retrievable and Searchable for every field that should be returned to a client app and subject to full text search processing. Tamsayıların tam metin veya benzer aranabilir olduğunu fark edeceksiniz (sayılar tam olarak değerlendirilir ve genellikle filtrelerdeki yararlı olur).You'll notice that integers are not full text or fuzzy searchable (numbers are evaluated verbatim and are often useful in filters).

Daha fazla bilgi için dizin özniteliklerinin ve dil çözümleyicilerinin açıklamasını gözden geçirin.Review the description of index attributes and language analyzers for more information.

Seçimlerinizi gözden geçirmek için bir dakikanızı ayırın.Take a moment to review your selections. Sihirbazı çalıştırdığınızda fiziksel veri yapıları oluşturulur ve tüm nesneleri bırakıp yeniden oluşturmadan bu alanları düzenleyemezsiniz.Once you run the wizard, physical data structures are created and you won't be able to edit these fields without dropping and recreating all objects.

Blob Dizin tanımı

6-Dizin Oluşturucu oluştur6 - Create indexer

Tam olarak belirtilen sihirbaz, arama hizmetinizde üç ayrı nesne oluşturur.Fully specified, the wizard creates three distinct objects in your search service. Veri kaynağı nesnesi ve dizin nesnesi, Azure Bilişsel Arama hizmetinize adlandırılmış kaynaklar olarak kaydedilir.A data source object and index object are saved as named resources in your Azure Cognitive Search service. Son adım bir Dizin Oluşturucu nesnesi oluşturur.The last step creates an indexer object. Dizin oluşturucunun adlandırılması, aynı sihirbaz dizisinde oluşturulan dizin ve veri kaynağı nesnesinden bağımsız olarak zamanlayabilir ve yönetebileceğiniz tek başına bir kaynak olarak var olmasına izin verir.Naming the indexer allows it to exist as a standalone resource, which you can schedule and manage independently of the index and data source object, created in the same wizard sequence.

Dizin oluşturucular hakkında bilginiz yoksa, Dizin Oluşturucu , aranabilir içerik için bir dış veri kaynağında gezinir ve Azure bilişsel arama bir kaynaktır.If you are not familiar with indexers, an indexer is a resource in Azure Cognitive Search that crawls an external data source for searchable content. Veri alma Sihirbazı 'nın çıktısı, JSON veri kaynağınıza gezinir, aranabilir içeriği ayıklar ve Azure bilişsel arama üzerindeki bir dizine içeri aktarır.The output of the Import data wizard is an indexer that crawls your JSON data source, extracts searchable content, and imports it into an index on Azure Cognitive Search.

Blob Dizin Oluşturucu tanımı

Sihirbazı çalıştırmak ve tüm nesneleri oluşturmak için Tamam ' ı tıklatın.Click OK to run the wizard and create all objects. Dizin oluşturma anında yapılır.Indexing commences immediately.

Veri içeri aktarmayı Portal sayfalarında izleyebilirsiniz.You can monitor data import in the portal pages. İlerleme durumu bildirimleri dizin oluşturma durumunu ve kaç belge yüklendiğini gösterir.Progress notifications indicate indexing status and how many documents are uploaded.

Dizin oluşturma işlemi tamamlandığında, dizini sorgulamak için Arama Gezgini ' ni kullanabilirsiniz.When indexing is complete, you can use Search explorer to query your index.

Not

Bekleyen verileri görmüyorsanız, daha fazla alan için daha fazla öznitelik ayarlamanız gerekebilir.If you don't see the data you expect, you might need to set more attributes on more fields. Yeni oluşturduğunuz dizin ve Dizin oluşturucuyu silin ve sihirbazda adım adım 5 ' teki dizin öznitelikleri için seçimlerinizi değiştirerek yeniden ilerleyin.Delete the index and indexer you just created, and step through the wizard again, modifying your selections for index attributes in step 5.

REST API'lerini kullanmaUse REST APIs

Azure Bilişsel Arama tüm dizin oluşturucular için ortak olan üç bölümden oluşan bir iş akışını izleyerek JSON bloblarını indekslemek REST API kullanabilirsiniz: veri kaynağı oluşturma, dizin oluşturma, Dizin Oluşturucu oluşturma.You can use the REST API to index JSON blobs, following a three-part workflow common to all indexers in Azure Cognitive Search: create a data source, create an index, create an indexer. Blob depolamadan veri ayıklama, Create Indexer isteği gönderdiğinizde oluşur.Data extraction from blob storage occurs when you submit the Create Indexer request. Bu istek bittikten sonra, sorgulanabilir bir dizininiz olur.After this request is finished, you will have a queryable index.

Bu bölümün sonunda, her üç nesnenin de nasıl oluşturulacağını gösteren REST örnek kodunu gözden geçirebilirsiniz.You can review REST example code at the end of this section that shows how to create all three objects. Bu bölüm ayrıca JSON ayrıştırma modları, tek blob 'lar, JSON dizilerive iç içe dizilerhakkındaki ayrıntıları içerir.This section also contains details about JSON parsing modes, single blobs, JSON arrays, and nested arrays.

Kod tabanlı JSON dizin oluşturma için Postman ve REST API kullanarak bu nesneleri oluşturun:For code-based JSON indexing, use Postman and the REST API to create these objects:

İşlem sırası, nesneleri bu sırayla oluşturmanızı ve çağıraçmanızı gerektirir.Order of operations requires that you create and call objects in this order. Portal iş akışının aksine, bir kod yaklaşımı, Dizin oluşturma isteği ISTEĞIYLE gönderilen JSON belgelerini kabul etmek için kullanılabilir bir dizin gerektirir.In contrast with the portal workflow, a code approach requires an available index to accept the JSON documents sent through the Create Indexer request.

Azure Blob depolamada JSON blob 'ları genellikle tek bir JSON belgesi veya bir JSON "dizisi" olacaktır.JSON blobs in Azure Blob storage are typically either a single JSON document or a JSON "array". Azure Bilişsel Arama blob Indexer, istek üzerinde Parsingmode parametresini nasıl ayarlayadiğinize bağlı olarak, her iki oluşturmayı de ayrıştırabilirler.The blob indexer in Azure Cognitive Search can parse either construction, depending on how you set the parsingMode parameter on the request.

JSON belgesiJSON document parsingModeparsingMode AçıklamaDescription KullanılabilirlikAvailability
Blob başına bir taneOne per blob json JSON bloblarını tek bir metin öbeği olarak ayrıştırır.Parses JSON blobs as a single chunk of text. Her JSON BLOBU tek bir Azure Bilişsel Arama belgesi haline gelir.Each JSON blob becomes a single Azure Cognitive Search document. Genellikle rest API ve .net SDK 'sında kullanılabilir.Generally available in both REST API and .NET SDK.
Blob başına birden çokMultiple per blob jsonArray Blob 'ta her bir dizi öğesinin ayrı bir Azure Bilişsel Arama belgesi haline geldiği bir JSON dizisi ayrıştırır.Parses a JSON array in the blob, where each element of the array becomes a separate Azure Cognitive Search document. Genellikle rest API ve .net SDK 'sında kullanılabilir.Generally available in both REST API and .NET SDK.
Blob başına birden çokMultiple per blob jsonLines Her varlığın ayrı bir Azure Bilişsel Arama belgesi haline geldiği bir yeni satır ile ayrılmış birden çok JSON varlığı ("dizi") içeren bir blobu ayrıştırır.Parses a blob which contains multiple JSON entities (an "array") separated by a newline, where each entity becomes a separate Azure Cognitive Search document. Genellikle rest API ve .net SDK 'sında kullanılabilir.Generally available in both REST API and .NET SDK.

1-istek için girişleri birleştirin1 - Assemble inputs for the request

Her istek için, Azure Bilişsel Arama için hizmet adı ve yönetici anahtarı (posta üst bilgisinde) ve BLOB depolama için depolama hesabı adı ve anahtarı sağlamalısınız.For each request, you must provide the service name and admin key for Azure Cognitive Search (in the POST header), and the storage account name and key for blob storage. Azure Bilişsel Arama HTTP istekleri göndermek için Postman kullanabilirsiniz.You can use Postman to send HTTP requests to Azure Cognitive Search.

Aşağıdaki dört değeri not defteri 'ne kopyalayın, böylece bunları bir isteğe yapıştırabilirsiniz:Copy the following four values into Notepad so that you can paste them into a request:

  • Azure Bilişsel Arama hizmet adıAzure Cognitive Search service name
  • Azure Bilişsel Arama yönetici anahtarıAzure Cognitive Search admin key
  • Azure depolama hesabı adıAzure storage account name
  • Azure depolama hesabı anahtarıAzure storage account key

Bu değerleri portalda bulabilirsiniz:You can find these values in the portal:

  1. Azure Bilişsel Arama Portal sayfalarında, genel bakış sayfasından arama hizmeti URL 'sini kopyalayın.In the portal pages for Azure Cognitive Search, copy the search service URL from the Overview page.

  2. Sol gezinti bölmesinde anahtarlar ' a tıklayın ve ardından birincil ya da ikincil anahtarı kopyalayın (eşdeğerdir).In the left navigation pane, click Keys and then copy either the primary or secondary key (they are equivalent).

  3. Depolama hesabınız için Portal sayfalarına geçiş yapın.Switch to the portal pages for your storage account. Sol gezinti bölmesindeki Ayarlaraltında erişim anahtarları' na tıklayın.In the left navigation pane, under Settings, click Access Keys. Bu sayfada hem hesap adı hem de anahtar sağlanır.This page provides both the account name and key. Depolama hesabı adını ve anahtarlardan birini Not defteri 'ne kopyalayın.Copy the storage account name and one of the keys to Notepad.

2-veri kaynağı oluşturma2 - Create a data source

Bu adım, Dizin Oluşturucu tarafından kullanılan veri kaynağı bağlantı bilgilerini sağlar.This step provides data source connection information used by the indexer. Veri kaynağı, Azure Bilişsel Arama, bağlantı bilgilerini devam eden bir adlandırılmış nesnedir.The data source is a named object in Azure Cognitive Search that persists the connection information. Veri kaynağı türü azureblob, Dizin Oluşturucu tarafından hangi veri ayıklama davranışlarını çağırılacağını belirler.The data source type, azureblob, determines which data extraction behaviors are invoked by the indexer.

Hizmet adı, yönetici anahtarı, depolama hesabı ve hesap anahtarı yer tutucuları için geçerli değerleri değiştirin.Substitute valid values for service name, admin key, storage account, and account key placeholders.

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

{
    "name" : "my-blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "optional, my-folder" }
}   

3-hedef arama dizini oluşturma3 - Create a target search index

Dizin oluşturucular bir dizin şeması ile eşleştirilir.Indexers are paired with an index schema. API 'YI kullanıyorsanız (portal yerine), Dizin Oluşturucu işleminde belirleyebilmeniz için bir dizini önceden hazırlayın.If you are using the API (rather than the portal), prepare an index in advance so that you can specify it on the indexer operation.

Dizin, Azure Bilişsel Arama 'te aranabilir içeriği depolar.The index stores searchable content in Azure Cognitive Search. Bir dizin oluşturmak için, bir belge, öznitelikler ve arama deneyimini şekillendirip diğer yapılar içindeki alanları belirten bir şema sağlayın.To create an index, provide a schema that specifies the fields in a document, attributes, and other constructs that shape the search experience. Kaynak ile aynı alan adlarına ve veri türlerine sahip bir dizin oluşturursanız, Dizin Oluşturucu kaynak ve hedef alanlarla eşleşir ve bu da alanları açık bir şekilde eşlemek için sahip olma çalışmalarınız olur.If you create an index that has the same field names and data types as the source, the indexer will match the source and destination fields, saving you the work of having to explicitly map the fields.

Aşağıdaki örnekte bir Dizin oluşturma isteği gösterilmektedir.The following example shows a Create Index request. Dizinde, bloblardan ayıklanan metnin depolanması için aranabilir bir content alanı olacaktır:The index will have a searchable content field to store the text extracted from blobs:

POST https://[service name].search.windows.net/indexes?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

{
      "name" : "my-target-index",
      "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
      ]
}

4-dizin oluşturucuyu yapılandırma ve çalıştırma4 - Configure and run the indexer

Bir dizin ve veri kaynağında olduğu gibi, Dizin Oluşturucu da Azure Bilişsel Arama hizmetinde oluşturup yeniden kullandığınız adlandırılmış bir nesnedir.As with an index and a data source, and indexer is also a named object that you create and reuse on an Azure Cognitive Search service. Bir dizin oluşturucu oluşturmak için tam olarak belirtilen bir istek aşağıdaki gibi görünebilir:A fully specified request to create an indexer might look as follows:

POST https://[service name].search.windows.net/indexers?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

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

Dizin Oluşturucu yapılandırması isteğin gövdesinde.Indexer configuration is in the body of the request. Azure Bilişsel Arama 'de zaten var olan bir veri kaynağı ve boş bir hedef dizin gerektirir.It requires a data source and an empty target index that already exists in Azure Cognitive Search.

Zamanlama ve parametreler isteğe bağlıdır.Schedule and parameters are optional. Bunları atlarsanız, Dizin Oluşturucu, ayrıştırma modu olarak json kullanarak hemen çalışır.If you omit them, the indexer runs immediately, using json as the parsing mode.

Bu belirli bir Dizin Oluşturucu alan eşlemelerini içermez.This particular indexer does not include field mappings. Dizin Oluşturucu tanımı içinde, kaynak JSON belgesinin özellikleri hedef arama dizininizdeki alanlarla eşleşiyorsa alan eşlemelerini bırakabilirsiniz.Within the indexer definition, you can leave out field mappings if the properties of the source JSON document match the fields of your target search index.

REST örneğiREST Example

Bu bölüm, nesne oluşturmak için kullanılan tüm isteklerin bir üst ucu olur.This section is a recap of all the requests used for creating objects. Bileşen bölümlerinin bir tartışması için, bu makaledeki önceki bölümlere bakın.For a discussion of component parts, see the previous sections in this article.

Veri kaynağı isteğiData source request

Tüm Dizin oluşturucular, mevcut verilere bağlantı bilgilerini sağlayan bir veri kaynağı nesnesi gerektirir.All indexers require a data source object that provides connection information to existing data.

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

{
    "name" : "my-blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "optional, my-folder" }
}  

Dizin isteğiIndex request

Tüm Dizin oluşturucular, verileri alan bir hedef dizin gerektirir.All indexers require a target index that receives the data. İsteğin gövdesi, aranabilir bir dizinde istenen davranışları desteklemek için Öznitelikli, alanlardan oluşan Dizin şemasını tanımlar.The body of the request defines the index schema, consisting of fields, attributed to support the desired behaviors in a searchable index. Dizin oluşturucuyu çalıştırdığınızda bu dizin boş olmalıdır.This index should be empty when you run the indexer.

POST https://[service name].search.windows.net/indexes?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

{
      "name" : "my-target-index",
      "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
      ]
}

Dizin Oluşturucu isteğiIndexer request

Bu istek, tam olarak belirtilen bir dizin oluşturucuyu gösterir.This request shows a fully-specified indexer. Bu, önceki örneklerde atlanan alan eşlemelerini içerir.It includes field mappings, which were omitted in previous examples. Kullanılabilir bir varsayılan değer olduğu sürece "Schedule", "Parameters" ve "fieldMappings" öğesinin isteğe bağlı olduğunu hatırlayın.Recall that "schedule", "parameters", and "fieldMappings" are optional as long as there is an available default. "Schedule" kullanılmazsa dizin oluşturucunun hemen çalışmasına neden olur.Omitting "schedule" causes the indexer to run immediately. "ParsingMode" kullanılmazsa Dizin "JSON" varsayılanını kullanılmasına neden olur.Omitting "parsingMode" causes the index to use the "json" default.

Azure Bilişsel Arama Dizin oluşturucuyu oluşturmak, verileri içeri aktarmayı tetikler.Creating the indexer on Azure Cognitive Search triggers data import. Hemen ve ardından bir zamanlama sağladıysanız çalışır.It runs immediately, and thereafter on a schedule if you've provided one.

POST https://[service name].search.windows.net/indexers?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key for Azure Cognitive Search]

{
  "name" : "my-json-indexer",
  "dataSourceName" : "my-blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "parameters" : { "configuration" : { "parsingMode" : "json" } },
  "fieldMappings" : [
    { "sourceFieldName" : "/article/text", "targetFieldName" : "text" },
    { "sourceFieldName" : "/article/datePublished", "targetFieldName" : "date" },
    { "sourceFieldName" : "/article/tags", "targetFieldName" : "tags" }
    ]
}

.NET SDK kullanmaUse .NET SDK

.NET SDK 'nın REST API tam eşliği vardır.The .NET SDK has full parity with the REST API. Kavramları, iş akışını ve gereksinimleri öğrenmek için önceki REST API bölümünü incelemenizi öneririz.We recommend that you review the previous REST API section to learn concepts, workflow, and requirements. Daha sonra, yönetilen kodda bir JSON Dizin Oluşturucu uygulamak için aşağıdaki .NET API başvuru belgelerine başvurabilirsiniz.You can then refer to following .NET API reference documentation to implement a JSON indexer in managed code.

Ayrıştırma modlarıParsing modes

JSON blob 'ları birden çok formu kabul edebilir.JSON blobs can assume multiple forms. JSON Dizin oluşturucudaki Parsingmode PARAMETRESI, JSON blob Içeriğinin bir Azure bilişsel arama dizininde nasıl ayrıştırılıp yapılandırıldığını belirler:The parsingMode parameter on the JSON indexer determines how JSON blob content is parsed and structured in an Azure Cognitive Search index:

parsingModeparsingMode AçıklamaDescription
json Her Blobun tek bir belge olarak dizinini oluştur.Index each blob as a single document. Bu varsayılandır.This is the default.
jsonArray Bloblarınız JSON dizilerlerinden oluşur ve dizideki her öğeye Azure Bilişsel Arama ayrı bir belge olmak istiyorsanız bu modu seçin.Choose this mode if your blobs consist of JSON arrays, and you need each element of the array to become a separate document in Azure Cognitive Search.
jsonLines Bloblarınız yeni bir satırla ayrılmış birden çok JSON varlığında oluşur ve her bir varlığa Azure Bilişsel Arama 'de ayrı bir belge olması gerekiyorsa bu modu seçin.Choose this mode if your blobs consist of multiple JSON entities, that are separated by a new line, and you need each entity to become a separate document in Azure Cognitive Search.

Belgeyi, arama sonuçlarında tek bir öğe olarak düşünebilirsiniz.You can think of a document as a single item in search results. Dizideki her öğenin arama sonuçlarında bağımsız bir öğe olarak gösterilmesini istiyorsanız, jsonArray veya jsonLines seçeneğini uygun şekilde kullanın.If you want each element in the array to show up in search results as an independent item, then use the jsonArray or jsonLines option as appropriate.

Dizin Oluşturucu tanımı içinde, isteğe bağlı olarak, kaynak JSON belgesinin hangi özelliklerinin hedef arama dizininizi doldurmak için kullanıldığını seçmek için alan eşlemelerini kullanabilirsiniz.Within the indexer definition, you can optionally use field mappings to choose which properties of the source JSON document are used to populate your target search index. jsonArray ayrıştırma modu için, dizi alt düzey bir özellik olarak mevcutsa, dizinin blob içine yerleştirileceğini gösteren bir belge kökü ayarlayabilirsiniz.For jsonArray parsing mode, if the array exists as a lower-level property, you can set a document root indicating where the array is placed within the blob.

Önemli

json, jsonArray veya jsonLines ayrıştırma modu kullandığınızda Azure Bilişsel Arama, veri kaynağınızdaki tüm Blobların JSON içerdiğini varsayar.When you use json, jsonArray or jsonLines parsing mode, Azure Cognitive Search assumes that all blobs in your data source contain JSON. Aynı veri kaynağında JSON ve JSON olmayan Blobların bir karışımını desteklemeniz gerekiyorsa UserVoice sitemizibize bilgilendirin.If you need to support a mix of JSON and non-JSON blobs in the same data source, let us know on our UserVoice site.

Tek JSON bloblarını ayrıştırmaParse single JSON blobs

Varsayılan olarak, Azure bilişsel arama blob Indexer JSON bloblarını tek bir metin öbeği olarak ayrıştırır.By default, Azure Cognitive Search blob indexer parses JSON blobs as a single chunk of text. Genellikle, JSON belgelerinizin yapısını korumak istersiniz.Often, you want to preserve the structure of your JSON documents. Örneğin, Azure Blob depolamada aşağıdaki JSON belgesine sahip olduğunu varsayalım:For example, assume you have the following JSON document in Azure Blob storage:

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

Blob Indexer JSON belgesini tek bir Azure Bilişsel Arama belgesi olarak ayrıştırır.The blob indexer parses the JSON document into a single Azure Cognitive Search document. Dizin Oluşturucu, "Text", "Dateyayınlanan" ve "Tags" ile aynı ada ve türü belirtilmiş hedef dizin alanlarına karşılık gelen bir dizini yükler.The indexer loads an index by matching "text", "datePublished", and "tags" from the source against identically named and typed target index fields.

Belirtildiği gibi, alan eşlemeleri gerekli değildir.As noted, field mappings are not required. "Text", "Dateyayınlanan ve" Tags "alanları ile bir dizin verildiğinde, blob Indexer istekte yer alan eşleme olmadan doğru eşlemeyi çıkarabilir.Given an index with "text", "datePublished, and "tags" fields, the blob indexer can infer the correct mapping without a field mapping present in the request.

JSON dizilerini ayrıştırmaParse JSON arrays

Alternatif olarak, JSON dizi seçeneğini de kullanabilirsiniz.Alternatively, you can use the JSON array option. Bu seçenek, Bloblar düzgün biçimlendirilmiş BIR JSON nesneleri dizisiiçerdiğinde ve her bir öğenin ayrı bir Azure bilişsel arama belgesi olmasını istediğinizde yararlıdır.This option is useful when blobs contain an array of well-formed JSON objects, and you want each element to become a separate Azure Cognitive Search document. Örneğin, aşağıdaki JSON blobu verildiğinde, her biri "kimlik" ve "metin" alanları ile Azure Bilişsel Arama dizininizi üç ayrı belge ile doldurabilirsiniz.For example, given the following JSON blob, you can populate your Azure Cognitive Search index with three separate documents, each with "id" and "text" fields.

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

JSON dizisi için Dizin Oluşturucu tanımı aşağıdaki örneğe benzer görünmelidir.For a JSON array, the indexer definition should look similar to the following example. ParsingMode parametresinin jsonArray ayrıştırıcısı belirttiğinden emin olun.Notice that the parsingMode parameter specifies the jsonArray parser. Doğru ayrıştırıcının belirtilmesi ve doğru veri girişi olması, JSON bloblarını dizine almanın yalnızca iki diziye özgü gereksinimleridir.Specifying the right parser and having the right data input are the only two array-specific requirements for indexing JSON blobs.

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

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

Yine, alan eşlemelerinin atlanabileceğini unutmayın.Again, notice that field mappings can be omitted. Aynı "kimlik" ve "metin" alanları ile bir dizin varsayıldığında, blob Indexer açık alan eşleme listesi olmadan doğru eşlemeyi çıkartabilirler.Assuming an index with identically named "id" and "text" fields, the blob indexer can infer the correct mapping without an explicit field mapping list.

İç içe diziler ayrıştırmaParse nested arrays

İç içe yerleştirilmiş öğeleri olan JSON dizileri için, çok düzeyli bir yapıyı göstermek üzere bir documentRoot belirtebilirsiniz.For JSON arrays having nested elements, you can specify a documentRoot to indicate a multi-level structure. Örneğin, bloblarınız şunun gibi görünür:For example, if your blobs look like this:

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

level2 özelliğinde yer alan diziyi indekslemek için bu yapılandırmayı kullanın:Use this configuration to index the array contained in the level2 property:

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

Newlines ile ayrılmış Blobları AyrıştırParse blobs separated by newlines

Blobun, bir yeni satır tarafından ayrılmış birden çok JSON varlığı içeriyorsa ve her bir öğenin ayrı bir Azure Bilişsel Arama belgesi olmasını istiyorsanız JSON satırları seçeneğini kabul edebilirsiniz.If your blob contains multiple JSON entities separated by a newline, and you want each element to become a separate Azure Cognitive Search document, you can opt for the JSON lines option. Örneğin, aşağıdaki blob (üç farklı JSON varlığı) verildiğinde, her biri "kimlik" ve "metin" alanları ile Azure Bilişsel Arama dizininizi üç ayrı belge ile doldurabilirsiniz.For example, given the following blob (where there are three different JSON entities), you can populate your Azure Cognitive Search index with three separate documents, each with "id" and "text" fields.

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

JSON satırları için Dizin Oluşturucu tanımı aşağıdaki örneğe benzer görünmelidir.For JSON lines, the indexer definition should look similar to the following example. ParsingMode parametresinin jsonLines ayrıştırıcısı belirttiğinden emin olun.Notice that the parsingMode parameter specifies the jsonLines parser.

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

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

Yeniden, jsonArray ayrıştırma moduna benzer şekilde alan eşlemelerinin atlanabileceğini unutmayın.Again, notice that field mappings can be omitted, similar to the jsonArray parsing mode.

Alan eşlemeleri EkleAdd field mappings

Kaynak ve hedef alanlar kusursuz hizalı olmadığında, açık alan-alan ilişkilendirmeleri için istek gövdesinde bir alan eşleme bölümü tanımlayabilirsiniz.When source and target fields are not perfectly aligned, you can define a field mapping section in the request body for explicit field-to-field associations.

Şu anda, yalnızca ilkel veri türlerini, dize dizilerini ve coğrafi JSON noktalarını desteklediğinden Azure Bilişsel Arama doğrudan rastgele JSON belgelerini dizinlemez.Currently, Azure Cognitive Search cannot index arbitrary JSON documents directly because it supports only primitive data types, string arrays, and GeoJSON points. Ancak, JSON belgenizin parçalarını seçmek için alan eşlemelerini kullanabilir ve bunları arama belgesinin en üst düzey alanlarına "kaldırabilirsiniz".However, you can use field mappings to pick parts of your JSON document and "lift" them into top-level fields of the search document. Alan eşlemeleri temelleri hakkında bilgi edinmek için bkz. Azure bilişsel arama Dizin oluşturucularda alan eşlemeleri.To learn about field mappings basics, see Field mappings in Azure Cognitive Search indexers.

Örnek JSON belgemizi yeniden ziyaret ediyor:Revisiting our example JSON document:

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

Aşağıdaki alanlarla bir arama dizini olduğunu varsayalım: tür Edm.String, date türü Edm.DateTimeOffsetve tags türündeki text.Collection(Edm.String)Assume a search index with the following fields: text of type Edm.String, date of type Edm.DateTimeOffset, and tags of type Collection(Edm.String). Dizindeki kaynak ve date alanında "Dateyayýmlandý" arasındaki tutarsızlığı fark edin.Notice the discrepancy between "datePublished" in the source and date field in the index. JSON 'nizi istenen şekle eşlemek için aşağıdaki alan eşlemelerini kullanın:To map your JSON into the desired shape, use the following field mappings:

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

Eşlemelerde kaynak alanı adları JSON işaretçisi gösterimi kullanılarak belirtilir.The source field names in the mappings are specified using the JSON Pointer notation. JSON belgenizin köküne başvuracak bir eğik çizgiyle başlayıp, eğik çizgi ile ayrılmış yolu kullanarak istediğiniz özelliği (rastgele iç içe geçme düzeyinde) seçin.You start with a forward slash to refer to the root of your JSON document, then pick the desired property (at arbitrary level of nesting) by using forward slash-separated path.

Ayrıca, sıfır tabanlı bir dizin kullanarak ayrı dizi öğelerine de başvurabilirsiniz.You can also refer to individual array elements by using a zero-based index. Örneğin, yukarıdaki örnekteki "Etiketler" dizisinin ilk öğesini seçmek için, şöyle bir alan eşlemesi kullanın:For example, to pick the first element of the "tags" array from the above example, use a field mapping like this:

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

Not

Bir alan eşleme yolundaki kaynak alan adı JSON içinde mevcut olmayan bir özelliğe başvuruyorsa, bu eşleme bir hata olmadan atlanır.If a source field name in a field mapping path refers to a property that doesn't exist in JSON, that mapping is skipped without an error. Bu, farklı bir şemaya sahip belgeleri desteklebilmemiz için yapılır (yaygın kullanım durumu).This is done so that we can support documents with a different schema (which is a common use case). Doğrulama olmadığından, alan eşleme belirtimindeki yazım hatalarını kullanmaktan kaçınmak için dikkatli olmanız gerekir.Because there is no validation, you need to take care to avoid typos in your field mapping specification.

Ayrıca bkz.See also