Aracılığıyla paylaş


Kılavuz: Azure AI Arama beceri setleri

Dizin oluşturma sırasında içerik ayıklama ve dönüştürme işlemleri için yapay zeka zenginleştirme işlem hattı oluşturmak üzere .NET için Azure SDK'sını kullanmayı öğrenin.

Beceri kümeleri ham içeriğe yapay zeka işlemesi ekleyerek daha düzgün ve aranabilir olmasını sağlıyor. Beceri kümelerinin nasıl çalıştığını öğrendiniz, görüntü analizinden doğal dil işlemeye ve dışarıdan sağladığınız özelleştirilmiş işlemeye kadar çok çeşitli dönüşümleri destekleyebilirsiniz.

Bu eğitimde, siz:

  • Zenginleştirme işlem hattında nesneleri tanımlama.
  • Beceri seti geliştirin. OCR, dil algılama, varlık tanıma ve anahtar ifade ayıklamayı çağır.
  • İşlem hattını çalıştır. Arama dizini oluşturma ve yükleme.
  • Tam metin araması kullanarak sonuçları denetleyin.

Overview

Bu öğreticide bir veri kaynağı, dizin, dizin oluşturucu ve beceri kümesi oluşturmak için C# ve Azure.Search.Documents istemci kitaplığı kullanılır.

Azure Depolama'daki bir blob kapsayıcısında yer alan örnek verilerin (yapılandırılmamış metin ve görüntüler) içerik ayıklamasıyla başlayan indeksleyici, işlem hattındaki her adımı yönlendirir.

İçerik ayıklandıktan sonra beceri kümesi, bilgileri bulmak ve ayıklamak için Microsoft'tan yerleşik becerileri yürütür. Bu beceriler arasında resimlerde Optik Karakter Tanıma (OCR), metinde dil algılama, anahtar ifade ayıklama ve varlık tanıma (kuruluşlar) sayılabilir. Beceri kümesi tarafından oluşturulan yeni bilgiler bir dizindeki alanlara gönderilir. Dizin dolduruldıktan sonra sorgular, modeller ve filtrelerdeki alanları kullanabilirsiniz.

Prerequisites

Note

Bu öğretici için ücretsiz bir arama hizmeti kullanabilirsiniz. Ücretsiz katmanı sizi üç dizin, üç dizin oluşturucu ve üç veri kaynağıyla sınırlar. Bu öğretici her birinden bir tane oluşturur. Başlamadan önce, hizmetinizde yeni kaynakları kabul etmek için yer olduğundan emin olun.

Dosyaları indirme

Örnek verileri Azure Depolama'ya yükleme

  1. Azure Depolama'da yeni bir kapsayıcı oluşturun ve karma içerik türleri olarak adlandırın.

  2. Örnek veri dosyalarını karşıya yükleyin.

  3. Azure AI Search'te bağlantı formüle edebilmeniz için depolama bağlantı dizesi alın.

    1. Sol tarafta Erişim anahtarları'nı seçin.

    2. Birinci veya ikinci anahtar için bağlantı dizesi kopyalayın. bağlantı dizesi aşağıdaki örneğe benzer:

      DefaultEndpointsProtocol=https;AccountName=<your account name>;AccountKey=<your account key>;EndpointSuffix=core.windows.net

Döküm Araçları

Yerleşik yapay zeka zenginleştirmesi, Doğal dil ve görüntü işleme için Azure Dili ve Azure Görüntü İşleme dahil olmak üzere Döküm Araçları tarafından desteklenir. Bu öğretici gibi küçük iş yükleri için dizinleyici başına 20 işlemin ücretsiz kotasını kullanabilirsiniz. Daha büyük iş yükleri için Standart fiyatlandırma için beceri kümesine bir Microsoft Foundry kaynağı ekleyin .

Arama hizmeti URL'si ve API anahtarı kopyalama

Bu öğretici kapsamında, Azure AI Search bağlantıları için bir uç nokta ve bir API anahtarı gerekir. Bu değerleri Azure portalından alabilirsiniz.

  1. Azure portalında oturum açın ve arama hizmetinizi seçin.

  2. Sol bölmeden Genel Bakış'ı seçin ve uç noktayı kopyalayın. Şu biçimde olmalıdır: https://my-service.search.windows.net

  3. Sol bölmeden Ayarlar>Anahtarları'nı seçin ve hizmette tam haklar için bir yönetici anahtarı kopyalayın. İş sürekliliğini sağlamak için, birini değiştirmeniz gerektiğinde iki değiştirilebilir yönetici anahtarı sağlanmıştır. İsteklerde nesneleri eklemek, değiştirmek veya silmek için iki anahtardan birini kullanabilirsiniz.

Ortamınızı ayarlama

Visual Studio'yu açıp yeni bir Konsol Uygulaması projesi oluşturarak başlayın.

Azure.Search.Documents'ı yükleme

Azure AI Search .NET SDK'sı dizinlerinizi, veri kaynaklarınızı, dizin oluşturucularınızı ve beceri kümelerinizi yönetmenizi, ayrıca HTTP ve JSON ayrıntılarını ele almak zorunda kalmadan belgeleri karşıya yükleyip yönetmenizi ve sorguları yürütmenizi sağlayan bir istemci kitaplığından oluşur. Bu istemci kitaplığı bir NuGet paketi olarak dağıtılır.

Bu proje için, Azure.Search.Documents'nun 11 veya daha yeni bir sürümünü ve Microsoft.Extensions.Configuration'nin en son sürümünü yükleyin.

  1. Visual Studio'da Araçlar>NuGet Paket Yöneticisi>Çözüm için NuGet Paketlerini Yönet... öğesini seçin.

  2. Azure.Search.Document'a göz atın.

  3. En son sürümü ve ardından Yükle'yi seçin.

  4. Microsoft.Extensions.Configuration ve Microsoft.Extensions.Configuration.Json'ı yüklemek için önceki adımları yineleyin.

Hizmet bağlantı bilgileri ekleme

  1. Çözüm Gezgini'nde projenize sağ tıklayın ve Yeni Öğe Ekle>... öğesini seçin.

  2. Dosyayı appsettings.json adlandırın ve Ekle'yi seçin.

  3. Bu dosyayı çıkış dizininize ekleyin.

    1. Sağ tıklayın ve appsettings.json seçin.
    2. Çıkış Dizinine Kopyala değerini Daha yeniyse kopyala olarak değiştirin.
  4. Aşağıdaki JSON dosyasını yeni JSON dosyanıza kopyalayın.

    {
      "SearchServiceUri": "<YourSearchServiceUri>",
      "SearchServiceAdminApiKey": "<YourSearchServiceAdminApiKey>",
      "SearchServiceQueryApiKey": "<YourSearchServiceQueryApiKey>",
      "AzureAIServicesKey": "<YourMultiRegionAzureAIServicesKey>",
      "AzureBlobConnectionString": "<YourAzureBlobConnectionString>"
    }
    

Arama hizmetinizi ve blob depolama hesabı bilgilerinizi ekleyin. Bu bilgileri önceki bölümde belirtilen hizmet sağlama adımlarından alabileceğinizi unutmayın.

SearchServiceUri için tam URL'yi girin.

Ad alanları ekleme

içine Program.csaşağıdaki ad alanlarını ekleyin.

using Azure;
using Azure.Search.Documents.Indexes;
using Azure.Search.Documents.Indexes.Models;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;

namespace EnrichwithAI

İstemci oluşturma

SearchIndexClient altında bir SearchIndexerClient ve Main örneğini oluşturun.

public static void Main(string[] args)
{
    // Create service client
    IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
    IConfigurationRoot configuration = builder.Build();

    string searchServiceUri = configuration["SearchServiceUri"];
    string adminApiKey = configuration["SearchServiceAdminApiKey"];
    string azureAiServicesKey = configuration["AzureAIServicesKey"];

    SearchIndexClient indexClient = new SearchIndexClient(new Uri(searchServiceUri), new AzureKeyCredential(adminApiKey));
    SearchIndexerClient indexerClient = new SearchIndexerClient(new Uri(searchServiceUri), new AzureKeyCredential(adminApiKey));
}

Note

İstemciler arama hizmetinize bağlanır. Çok fazla bağlantı açmamak için, mümkünse uygulamanızda tek bir örneği paylaşmaya çalışmanız gerekir. Yöntemler, bu tür paylaşımı etkinleştirmek için iş parçacığı açısından güvenlidir.

Hata sırasında programdan çıkmak için işlev ekleme

Bu öğretici, dizin oluşturma işlem hattının her adımını anlamanıza yardımcı olmak içindir. Program, veri kaynağını, beceri kümesini, dizini veya dizin oluşturucuyu oluşturmasını engelleyen kritik bir sorun olduğunda hata mesajını çıktı olarak verir ve sonlandırır, böylece sorun anlaşılabilir ve çözüme kavuşturulabilir.

ExitProgram öğesini, programın çıkışını gerektiren senaryoları işlemek için Main öğesine ekleyin.

private static void ExitProgram(string message)
{
    Console.WriteLine("{0}", message);
    Console.WriteLine("Press any key to exit the program...");
    Console.ReadKey();
    Environment.Exit(0);
}

İşlem hattını oluştur

Azure AI Search'te, dizin oluşturma (veya veri alımı) sırasında yapay zeka işleme gerçekleşir. İzlenecek kılavuzun bu bölümü dört nesne oluşturur: veri kaynağı, dizin tanımı, beceri kümesi, dizin oluşturucu.

1. Adım: Veri kaynağı oluşturma

SearchIndexerClient bir DataSourceName nesneye ayarlayabileceğiniz bir SearchIndexerDataSourceConnection özelliğine sahiptir. Bu nesne, Azure AI Search veri kaynaklarını oluşturmak, listelemek, güncelleştirmek veya silmek için ihtiyacınız olan tüm yöntemleri sağlar.

SearchIndexerDataSourceConnection'i çağırarak yeni bir indexerClient.CreateOrUpdateDataSourceConnection(dataSource) örneği oluşturun. Aşağıdaki kod türünde AzureBlobbir veri kaynağı oluşturur.

private static SearchIndexerDataSourceConnection CreateOrUpdateDataSource(SearchIndexerClient indexerClient, IConfigurationRoot configuration)
{
    SearchIndexerDataSourceConnection dataSource = new SearchIndexerDataSourceConnection(
        name: "demodata",
        type: SearchIndexerDataSourceType.AzureBlob,
        connectionString: configuration["AzureBlobConnectionString"],
        container: new SearchIndexerDataContainer("mixed-content-type"))
    {
        Description = "Demo files to demonstrate Azure AI Search capabilities."
    };

    // The data source does not need to be deleted if it was already created
    // since we are using the CreateOrUpdate method
    try
    {
        indexerClient.CreateOrUpdateDataSourceConnection(dataSource);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Failed to create or update the data source\n Exception message: {0}\n", ex.Message);
        ExitProgram("Cannot continue without a data source");
    }

    return dataSource;
}

Başarılı bir istek için yöntemi, oluşturulan veri kaynağını döndürür. İstekte geçersiz parametre gibi bir sorun varsa, yöntemi bir özel durum oluşturur.

Şimdi yeni eklediğiniz Main işlevini çağırmak için CreateOrUpdateDataSource içine bir satır ekleyin.

// Create or Update the data source
Console.WriteLine("Creating or updating the data source...");
SearchIndexerDataSourceConnection dataSource = CreateOrUpdateDataSource(indexerClient, configuration);

Çözümü derleyin ve çalıştırın. İlk isteğiniz bu olduğundan, veri kaynağının Azure AI Search'te oluşturulduğunu onaylamak için Azure portalını denetleyin. Arama hizmetine genel bakış sayfasında, Veri Kaynakları listesinde yeni bir öğe olduğunu doğrulayın. Azure portalı sayfasının yenilenmesi için birkaç dakika beklemeniz gerekebilir.

Azure portalındaki veri kaynakları kutucuğu

2. Adım: Beceri kümesi oluşturma

Bu bölümde, verilerinize uygulamak istediğiniz bir dizi zenginleştirme adımı tanımlayacaksınız. Her zenginleştirme adımına beceri ve zenginleştirme adımları kümesi( beceri kümesi) denir. Bu öğreticide beceri kümesi için yerleşik beceriler kullanılır:

  • Görüntü dosyalarındaki yazdırılan ve el yazısı metinleri tanımak için Optik Karakter Tanıma.

  • Bir alan koleksiyonundaki metni tek bir "birleştirilmiş içerik" alanında birleştirmek için Metin Birleştirme.

  • İçeriğin dilini tanımlamak için Dil Algılama.

  • Blob kapsayıcısında içerikten kuruluşların adlarını ayıklamak için Varlık Tanıma.

  • Anahtar tümcecik ayıklama becerisini ve varlık tanıma becerisini çağırmadan önce büyük içeriği daha küçük öbeklere bölmek için Metin Bölme. Anahtar ifade ayıklama ve varlık tanıma, 50.000 veya daha az karakterden oluşan girişleri kabul eder. Bu sınıra uymak için örnek dosyaların birkaç tanesinin bölünmesi gerekir.

  • Anahtar ifadeleri çıkarmak için Anahtar İfade Ayıklama.

İlk işleme sırasında Azure AI Search, farklı dosya biçimlerinden içerik ayıklamak için her belgeyi kırıyor. Kaynak dosyadan kaynaklanan metin, her belge için bir tane olmak üzere oluşturulan content bir alana yerleştirilir. Bu nedenle, bu metni kullanmak için girişi "/document/content" olarak ayarlayın. Görüntü içeriği, bir beceri kümesinde normalized_images olarak belirtilen ve oluşturulan /document/normalized_images/* alanına yerleştirilir.

Çıktılar bir dizine eşlenebilir, aşağı akış becerisine yönelik giriş olarak kullanılır veya dil kodunda olduğu gibi her iki şekilde de kullanılabilir. Dizinde bir dil kodu, filtreleme için yararlıdır. Giriş olarak, dil kodu metin analizi becerileri tarafından sözcük kesme ile ilgili dil kurallarını bilgilendirmek için kullanılır.

Beceri kümesi temelleri hakkında daha fazla bilgi için bkz. Beceri kümesini tanımlama.

OCR becerisi

görüntülerden OcrSkill metin ayıklar. Bu beceri, bir normalized_images alanının mevcut olduğunu varsayar. Bu alanı oluşturmak için öğreticinin devamında dizin oluşturucu tanımındaki yapılandırmayı "imageAction" olarak "generateNormalizedImages"ayarlayacağız.

private static OcrSkill CreateOcrSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("image")
    {
        Source = "/document/normalized_images/*"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("text")
    {
        TargetName = "text"
    });

    OcrSkill ocrSkill = new OcrSkill(inputMappings, outputMappings)
    {
        Description = "Extract text (plain and structured) from image",
        Context = "/document/normalized_images/*",
        DefaultLanguageCode = OcrSkillLanguage.En,
        ShouldDetectOrientation = true
    };

    return ocrSkill;
}

Birleştirme becerisi

Bu bölümde, belge içerik alanını OCR becerisi tarafından oluşturulan metinle birleştirilen bir MergeSkill oluşturacaksınız.

private static MergeSkill CreateMergeSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("text")
    {
        Source = "/document/content"
    });
    inputMappings.Add(new InputFieldMappingEntry("itemsToInsert")
    {
        Source = "/document/normalized_images/*/text"
    });
    inputMappings.Add(new InputFieldMappingEntry("offsets")
    {
        Source = "/document/normalized_images/*/contentOffset"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("mergedText")
    {
        TargetName = "merged_text"
    });

    MergeSkill mergeSkill = new MergeSkill(inputMappings, outputMappings)
    {
        Description = "Create merged_text which includes all the textual representation of each image inserted at the right location in the content field.",
        Context = "/document",
        InsertPreTag = " ",
        InsertPostTag = " "
    };

    return mergeSkill;
}

Dil algılama becerisi

, LanguageDetectionSkill giriş metninin dilini algılar ve istekte gönderilen her belge için tek bir dil kodu bildirir. Dil Algılama becerisinin çıkışını, Metin Bölme becerisine girişin bir parçası olarak kullanırız.

private static LanguageDetectionSkill CreateLanguageDetectionSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("text")
    {
        Source = "/document/merged_text"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("languageCode")
    {
        TargetName = "languageCode"
    });

    LanguageDetectionSkill languageDetectionSkill = new LanguageDetectionSkill(inputMappings, outputMappings)
    {
        Description = "Detect the language used in the document",
        Context = "/document"
    };

    return languageDetectionSkill;
}

Metin bölme becerisi

Aşağıdaki SplitSkill metinleri sayfalara böler ve tarafından ölçülen String.Lengthsayfa uzunluğunu 4.000 karakterle sınırlar. Algoritma, metni en maximumPageLength büyük boyuttaki öbeklere bölmeye çalışır. Bu durumda algoritma, tümce sınırının üzerindeki tümceyi bölmek için en iyisini yapar, bu nedenle öbeğin boyutu değerinden biraz daha küçük maximumPageLengtholabilir.

private static SplitSkill CreateSplitSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("text")
    {
        Source = "/document/merged_text"
    });
    inputMappings.Add(new InputFieldMappingEntry("languageCode")
    {
        Source = "/document/languageCode"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("textItems")
    {
        TargetName = "pages",
    });

    SplitSkill splitSkill = new SplitSkill(inputMappings, outputMappings)
    {
        Description = "Split content into pages",
        Context = "/document",
        TextSplitMode = TextSplitMode.Pages,
        MaximumPageLength = 4000,
        DefaultLanguageCode = SplitSkillLanguage.En
    };

    return splitSkill;
}

Varlık tanıma becerisi

Bu EntityRecognitionSkill örnek kategori türünü organizationtanıyacak şekilde ayarlanmıştır. EntityRecognitionSkill ayrıca person ve location kategori türlerini tanıyabilir.

"Bağlam" alanının yıldız işaretiyle olarak ayarlandığına "/document/pages/*" dikkat edin; bu, altındaki "/document/pages"her sayfa için zenginleştirme adımının çağrıldığı anlamına gelir.

private static EntityRecognitionSkill CreateEntityRecognitionSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("text")
    {
        Source = "/document/pages/*"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("organizations")
    {
        TargetName = "organizations"
    });

    // Specify the V3 version of the EntityRecognitionSkill
    var skillVersion = EntityRecognitionSkill.SkillVersion.V3;

    var entityRecognitionSkill = new EntityRecognitionSkill(inputMappings, outputMappings, skillVersion)
    {
        Description = "Recognize organizations",
        Context = "/document/pages/*",
        DefaultLanguageCode = EntityRecognitionSkillLanguage.En
    };
    entityRecognitionSkill.Categories.Add(EntityCategory.Organization);
    return entityRecognitionSkill;
}

Anahtar ifade ayıklama becerisi

Yeni oluşturulan EntityRecognitionSkill örneği gibi, KeyPhraseExtractionSkill örneği belgenin her sayfası için çağrılır.

private static KeyPhraseExtractionSkill CreateKeyPhraseExtractionSkill()
{
    List<InputFieldMappingEntry> inputMappings = new List<InputFieldMappingEntry>();
    inputMappings.Add(new InputFieldMappingEntry("text")
    {
        Source = "/document/pages/*"
    });
    inputMappings.Add(new InputFieldMappingEntry("languageCode")
    {
        Source = "/document/languageCode"
    });

    List<OutputFieldMappingEntry> outputMappings = new List<OutputFieldMappingEntry>();
    outputMappings.Add(new OutputFieldMappingEntry("keyPhrases")
    {
        TargetName = "keyPhrases"
    });

    KeyPhraseExtractionSkill keyPhraseExtractionSkill = new KeyPhraseExtractionSkill(inputMappings, outputMappings)
    {
        Description = "Extract the key phrases",
        Context = "/document/pages/*",
        DefaultLanguageCode = KeyPhraseExtractionSkillLanguage.En
    };

    return keyPhraseExtractionSkill;
}

Becerileri geliştirme

Becerilerinizi kullanarak SearchIndexerSkillset oluşturun.

private static SearchIndexerSkillset CreateOrUpdateDemoSkillSet(SearchIndexerClient indexerClient, IList<SearchIndexerSkill> skills,string azureAiServicesKey)
{
    SearchIndexerSkillset skillset = new SearchIndexerSkillset("demoskillset", skills)
    {
        // Foundry Tools was formerly known as Cognitive Services.
        // The APIs still use the old name, so we need to create a CognitiveServicesAccountKey object.
        Description = "Demo skillset",
        CognitiveServicesAccount = new CognitiveServicesAccountKey(azureAiServicesKey)
    };

    // Create the skillset in your search service.
    // The skillset does not need to be deleted if it was already created
    // since we are using the CreateOrUpdate method
    try
    {
        indexerClient.CreateOrUpdateSkillset(skillset);
    }
    catch (RequestFailedException ex)
    {
        Console.WriteLine("Failed to create the skillset\n Exception message: {0}\n", ex.Message);
        ExitProgram("Cannot continue without a skillset");
    }

    return skillset;
}

öğesine Main aşağıdaki satırları ekleyin.

// Create the skills
Console.WriteLine("Creating the skills...");
OcrSkill ocrSkill = CreateOcrSkill();
MergeSkill mergeSkill = CreateMergeSkill();
EntityRecognitionSkill entityRecognitionSkill = CreateEntityRecognitionSkill();
LanguageDetectionSkill languageDetectionSkill = CreateLanguageDetectionSkill();
SplitSkill splitSkill = CreateSplitSkill();
KeyPhraseExtractionSkill keyPhraseExtractionSkill = CreateKeyPhraseExtractionSkill();

// Create the skillset
Console.WriteLine("Creating or updating the skillset...");
List<SearchIndexerSkill> skills = new List<SearchIndexerSkill>();
skills.Add(ocrSkill);
skills.Add(mergeSkill);
skills.Add(languageDetectionSkill);
skills.Add(splitSkill);
skills.Add(entityRecognitionSkill);
skills.Add(keyPhraseExtractionSkill);

SearchIndexerSkillset skillset = CreateOrUpdateDemoSkillSet(indexerClient, skills, azureAiServicesKey);

3. Adım: Dizin oluşturma

Bu bölümde, aranabilir dizine eklenecek alanları ve her alan için arama özniteliklerini belirterek dizin şemasını tanımlarsınız. Alanların bir türü vardır ve alanın nasıl kullanıldığını belirleyen öznitelikler alabilir (aranabilir, sıralanabilir vb.). Bir dizindeki alan adlarının kaynaktaki alan adlarına aynı şekilde uyması gerekmez. Sonraki bir adımda, kaynak-hedef alanlarını bağlamak için dizin oluşturucuya alan eşlemeleri eklersiniz. Bu adım için, arama uygulamanızla ilgili alan adlandırma kurallarını kullanarak dizini tanımlayın.

Bu alıştırmada aşağıdaki alanlar ve alan türleri kullanılır:

Alan adları Alan türleri
id Edm.String
content Edm.String
languageCode Edm.String
keyPhrases Liste<Edm.String>
organizations Liste<Edm.String>

DemoIndex Sınıfı Oluşturma

Bu dizinin alanları bir model sınıfı kullanılarak tanımlanır. Model sınıfının her özelliği, ilgili dizin alanının aramayla ilgili davranışlarını belirleyen özniteliklere sahiptir.

Model sınıfını yeni bir C# dosyasına ekleyeceğiz. Projenizde sağ seçim yapın veYeni Öğe Ekle...'> seçin, "Sınıf" öğesini seçin ve dosyayı DemoIndex.csadlandırın, ardından Ekle'yi seçin.

ve Azure.Search.Documents.Indexes ad alanlarının türlerini kullanmak istediğinizi belirttiğinizden System.Text.Json.Serialization emin olun.

Aşağıdaki model sınıfı tanımını öğesine DemoIndex.cs ekleyin ve dizini oluşturduğunuz ad alanına ekleyin.

using Azure.Search.Documents.Indexes;
using System.Text.Json.Serialization;

namespace EnrichwithAI
{
    // The SerializePropertyNamesAsCamelCase is currently unsupported as of this writing. 
    // Replace it with JsonPropertyName
    public class DemoIndex
    {
        [SearchableField(IsSortable = true, IsKey = true)]
        [JsonPropertyName("id")]
        public string Id { get; set; }

        [SearchableField]
        [JsonPropertyName("content")]
        public string Content { get; set; }

        [SearchableField]
        [JsonPropertyName("languageCode")]
        public string LanguageCode { get; set; }

        [SearchableField]
        [JsonPropertyName("keyPhrases")]
        public string[] KeyPhrases { get; set; }

        [SearchableField]
        [JsonPropertyName("organizations")]
        public string[] Organizations { get; set; }
    }
}

Artık bir model sınıfı tanımladığınıza göre, dizin Program.cs tanımını oldukça kolay bir şekilde oluşturabilirsiniz. Bu dizine demoindex ismi verilecektir. Bu ada sahip bir indeks zaten varsa, silinir.

private static SearchIndex CreateDemoIndex(SearchIndexClient indexClient)
{
    FieldBuilder builder = new FieldBuilder();
    var index = new SearchIndex("demoindex")
    {
        Fields = builder.Build(typeof(DemoIndex))
    };

    try
    {
        indexClient.GetIndex(index.Name);
        indexClient.DeleteIndex(index.Name);
    }
    catch (RequestFailedException ex) when (ex.Status == 404)
    {
        //if the specified index not exist, 404 will be thrown.
    }

    try
    {
        indexClient.CreateIndex(index);
    }
    catch (RequestFailedException ex)
    {
        Console.WriteLine("Failed to create the index\n Exception message: {0}\n", ex.Message);
        ExitProgram("Cannot continue without an index");
    }

    return index;
}

Test sırasında dizini birden çok kez oluşturmaya çalıştığınızı fark edebilirsiniz. Bu nedenle, oluşturmaya çalışmadan önce oluşturacağınız dizinin zaten var olup olmadığını kontrol edin.

öğesine Main aşağıdaki satırları ekleyin.

// Create the index
Console.WriteLine("Creating the index...");
SearchIndex demoIndex = CreateDemoIndex(indexClient);

Kesinleştirilmiş başvuruyu çözmek için aşağıdaki using deyimini ekleyin.

using Index = Azure.Search.Documents.Indexes.Models;

Dizin kavramları hakkında daha fazla bilgi edinmek için bkz. Dizin Oluşturma (REST API).

4. Adım: Dizin oluşturucu oluşturma ve çalıştırma

Şimdiye kadar bir veri kaynağı, beceri kümesi ve dizin oluşturdunuz. Bu üç bileşen, her bir parçayı tek bir çok aşamalı işlemde bir araya getiren bir dizin oluşturucunun parçası haline gelir. Bunları bir dizin oluşturucuda birbirine bağlamak için alan eşlemeleri tanımlamanız gerekir.

  • fieldMappings beceri kümesinden önce işlenir ve kaynak alanları veri kaynağından dizindeki hedef alanlara eşler. Alan adları ve türleri her iki uçta da aynıysa eşleme gerekmez.

  • Beceri kümesinden sonra işlenen _outputFieldMappings_, belgeyi kırma veya zenginleştirme işlemi oluşturana kadar var olmayan _sourceFieldNames_'a atıfta bulunur. targetFieldName bir dizindeki bir alandır.

Çıkışlara girişleri bağlamanın yanı sıra, veri yapılarını düzleştirmeye yönelik alan eşlemelerini de kullanabilirsiniz. Daha fazla bilgi için bkz. Zenginleştirilmiş alanları aranabilir bir dizinle eşleme.

private static SearchIndexer CreateDemoIndexer(SearchIndexerClient indexerClient, SearchIndexerDataSourceConnection dataSource, SearchIndexerSkillset skillSet, SearchIndex index)
{
    IndexingParameters indexingParameters = new IndexingParameters()
    {
        MaxFailedItems = -1,
        MaxFailedItemsPerBatch = -1,
    };
    indexingParameters.Configuration.Add("dataToExtract", "contentAndMetadata");
    indexingParameters.Configuration.Add("imageAction", "generateNormalizedImages");

    SearchIndexer indexer = new SearchIndexer("demoindexer", dataSource.Name, index.Name)
    {
        Description = "Demo Indexer",
        SkillsetName = skillSet.Name,
        Parameters = indexingParameters
    };

    FieldMappingFunction mappingFunction = new FieldMappingFunction("base64Encode");
    mappingFunction.Parameters.Add("useHttpServerUtilityUrlTokenEncode", true);

    indexer.FieldMappings.Add(new FieldMapping("metadata_storage_path")
    {
        TargetFieldName = "id",
        MappingFunction = mappingFunction

    });
    indexer.FieldMappings.Add(new FieldMapping("content")
    {
        TargetFieldName = "content"
    });

    indexer.OutputFieldMappings.Add(new FieldMapping("/document/pages/*/organizations/*")
    {
        TargetFieldName = "organizations"
    });
    indexer.OutputFieldMappings.Add(new FieldMapping("/document/pages/*/keyPhrases/*")
    {
        TargetFieldName = "keyPhrases"
    });
    indexer.OutputFieldMappings.Add(new FieldMapping("/document/languageCode")
    {
        TargetFieldName = "languageCode"
    });

    try
    {
        indexerClient.GetIndexer(indexer.Name);
        indexerClient.DeleteIndexer(indexer.Name);
    }
    catch (RequestFailedException ex) when (ex.Status == 404)
    {
        //if the specified indexer not exist, 404 will be thrown.
    }

    try
    {
        indexerClient.CreateIndexer(indexer);
    }
    catch (RequestFailedException ex)
    {
        Console.WriteLine("Failed to create the indexer\n Exception message: {0}\n", ex.Message);
        ExitProgram("Cannot continue without creating an indexer");
    }

    return indexer;
}

öğesine Main aşağıdaki satırları ekleyin.

// Create the indexer, map fields, and execute transformations
Console.WriteLine("Creating the indexer and executing the pipeline...");
SearchIndexer demoIndexer = CreateDemoIndexer(indexerClient, dataSource, skillset, demoIndex);

Dizin oluşturucu işlemenin tamamlanmasının biraz zaman almasını bekleyin. Veri kümesi küçük olsa da, analiz becerileri bilgi işlem açısından yoğundur. Görüntü analizi gibi bazı beceriler uzun süre çalışır.

Tip

Bir dizinleyici oluşturmak, işlem hattını tetikler. Verilere ulaşılırken, eşleme girişleri ve çıktıları veya işlemlerin sırası ile ilgili sorun olursa bunlar bu aşamada görüntülenir.

Dizin oluşturucu oluşturmayı keşfedin

Kod "maxFailedItems" -1 olarak ayarlanır, bu da dizin motoruna veri içeri aktarma sırasında oluşabilecek hataları yoksaymasını bildirir. Tanıtım veri kaynağında çok az belge bulunduğundan bu yararlı olur. Daha büyük bir veri kaynağı için değeri, 0’dan daha büyük bir değere ayarlarsınız.

Ayrıca değerinin olarak ayarlandığına "dataToExtract""contentAndMetadata"da dikkat edin. Bu deyim, dizin oluşturucuya içeriği farklı dosya biçimlerinden ve her dosyayla ilgili meta verilerden otomatik olarak ayıklamasını söyler.

İçerik ayıklandığında, veri kaynağında bulunan görüntülerden metin ayıklamak için ayarlayabilirsiniz imageAction . "imageAction" Yapılandırma kümesi"generateNormalizedImages", OCR Becerisi ve Metin Birleştirme Becerisi ile birlikte dizin oluşturucuya görüntülerden metin ayıklamasını (örneğin, trafik Durdurma işaretinden "durdurma" sözcüğü) ve içerik alanının bir parçası olarak eklemesini söyler. Bu davranış hem belgelere eklenmiş görüntüler (PDF içindeki bir görüntüyü düşünün) hem de veri kaynağında bulunan görüntüler (örneğin bir JPG dosyası) için geçerlidir.

Dizinleme sürecini izleme

Dizin oluşturucu tanımlandıktan sonra, isteği gönderdiğinizde otomatik olarak çalışır. Tanımladığınız becerilere bağlı olarak dizin oluşturma beklediğinizden daha uzun sürebilir. Dizin oluşturucunun hala çalışıp çalışmadığını öğrenmek için yöntemini kullanın GetStatus .

private static void CheckIndexerOverallStatus(SearchIndexerClient indexerClient, SearchIndexer indexer)
{
    try
    {
        var demoIndexerExecutionInfo = indexerClient.GetIndexerStatus(indexer.Name);

        switch (demoIndexerExecutionInfo.Value.Status)
        {
            case IndexerStatus.Error:
                ExitProgram("Indexer has error status. Check the Azure portal to further understand the error.");
                break;
            case IndexerStatus.Running:
                Console.WriteLine("Indexer is running");
                break;
            case IndexerStatus.Unknown:
                Console.WriteLine("Indexer status is unknown");
                break;
            default:
                Console.WriteLine("No indexer information");
                break;
        }
    }
    catch (RequestFailedException ex)
    {
        Console.WriteLine("Failed to get indexer overall status\n Exception message: {0}\n", ex.Message);
    }
}

demoIndexerExecutionInfo dizin oluşturucunun geçerli durumunu ve yürütme geçmişini temsil eder.

Bazı kaynak dosya ve beceri birleşimlerinde uyarılar yaygındır ve her zaman bir sorun göstermez. Bu öğreticide, uyarılar zararsızdır (örneğin, JPEG dosyalarından metin girişi yoktur).

öğesine Main aşağıdaki satırları ekleyin.

// Check indexer overall status
Console.WriteLine("Check the indexer overall status...");
CheckIndexerOverallStatus(indexerClient, demoIndexer);

Azure AI Search öğreticisi konsol uygulamalarında genellikle sonuç döndüren sorguları çalıştırmadan önce 2 saniyelik bir gecikme ekleriz, ancak zenginleştirmenin tamamlanması birkaç dakika sürdüğünden konsol uygulamasını kapatacak ve bunun yerine başka bir yaklaşım kullanacağız.

En kolay seçenek, Azure portalında Arama Gezgini'dir . İlk olarak tüm belgeleri döndüren boş bir sorgu veya işlem hattı tarafından oluşturulan yeni alan içeriğini döndüren daha hedefli bir arama çalıştırabilirsiniz.

  1. Azure portalında, arama hizmeti sayfalarında Arama Yönetimi>Dizinleri'ni genişletin.

  2. Listede demoindex'yi bul. 14 belge olmalı. Belge sayısı sıfırsa, dizin oluşturucu hala çalışıyor veya sayfa henüz yenilenmedi.

  3. demoindexseçin. Arama Gezgini ilk sekmedir.

  4. İlk belge yüklenir yüklenmez içerik aranabilir. İçeriğin var olduğunu doğrulamak için Ara'ya tıklayarak belirtilmeyen bir sorgu çalıştırın. Bu sorgu, şu anda dizine alınmış olan tüm belgeleri döndürerek size dizinin ne içerdiği hakkında bir fikir verir.

  5. Daha fazla yönetilebilir sonuç için JSON görünümüne geçin ve parametreleri ayarlayarak alanları seçin:

    {
        "search": "*",
        "count": true,
        "select": "id, languageCode, organizations"
    }
    

Sıfırla ve yeniden çalıştır

Geliştirmenin ilk deneysel aşamalarında tasarım yinelemesi için en pratik yaklaşım, nesneleri Azure AI Search'ten silmek ve kodunuzun bunları yeniden oluşturmasına izin vermektir. Kaynak adları benzersizdir. Bir nesneyi sildiğinizde, aynı adı kullanarak nesneyi yeniden oluşturabilirsiniz.

Bu öğreticinin örnek kodu, mevcut nesneleri denetler ve kodunuzu yeniden çalıştırabilmeniz için bunları siler. Dizinleri, dizin oluşturucuları, veri kaynaklarını ve beceri kümelerini silmek için Azure portalını da kullanabilirsiniz.

Takeaways

Bu öğreticide, veri kaynağı, beceri kümesi, dizin ve dizin oluşturucu olmak üzere bileşen parçaları oluşturma yoluyla zenginleştirilmiş bir dizin oluşturma işlem hattı oluşturmaya yönelik temel adımlar gösterilmiştir.

Yerleşik beceriler , beceri kümesi tanımı ve girişler ve çıkışlar aracılığıyla becerileri birbirine zincirleme mekaniği ile birlikte tanıtıldı. Ayrıca dizin oluşturucu tanımında zenginleştirilmiş değerleri işlem hattından Azure AI Arama hizmeti aranabilir bir dizine yönlendirmek için gerekli olduğunu öğrendinizoutputFieldMappings.

Son olarak, daha fazla yineleme için sonuçların nasıl test edileceğini ve sistemin nasıl sıfırlanacağını öğrendiniz. Öğrendiniz ki dizine karşı sorgular düzenlendiğinde, zenginleştirilmiş dizin oluşturma işlem hattı tarafından oluşturulan çıktı döndürülür. Ayrıca, bir işlem hattını yeniden çalıştırmadan önce dizin oluşturucu durumunu denetlemeyi ve hangi nesnelerin silineceği hakkında da bilgi edinmişsinizdir.

Kaynakları temizle

Kendi aboneliğinizde çalışırken, bir projenin sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar sana pahalıya mal olabilir. Kaynakları tek tek silebilir veya kaynak grubunu silip kaynak kümesinin tamamını silebilirsiniz.

Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak Kaynakları Azure portalında bulabilir ve yönetebilirsiniz.

Sonraki Adımlar

Yapay zeka zenginleştirme işlem hattındaki tüm nesneleri bildiğinize göre şimdi beceri kümesi tanımlarına ve bireysel becerilere daha yakından bakalım.

Dizin oluşturma sırasında içerik ayıklama ve dönüşümler için yapay zeka zenginleştirme işlem hattı oluşturan REST API'leri çağırmayı öğrenin.

Beceri kümeleri ham içeriğe yapay zeka işlemesi ekleyerek daha düzgün ve aranabilir olmasını sağlıyor. Beceri kümelerinin nasıl çalıştığını öğrendiniz, görüntü analizinden doğal dil işlemeye ve dışarıdan sağladığınız özelleştirilmiş işlemeye kadar çok çeşitli dönüşümleri destekleyebilirsiniz.

Bu eğitimde, siz:

  • Zenginleştirme işlem hattında nesneleri tanımlama.
  • Beceri seti geliştirin. OCR, dil algılama, varlık tanıma ve anahtar ifade ayıklamayı çağır.
  • İşlem hattını çalıştır. Arama dizini oluşturma ve yükleme.
  • Tam metin araması kullanarak sonuçları denetleyin.

Overview

Bu öğreticide veri kaynağı, dizin, dizin oluşturucu ve beceri kümesi oluşturmak için REST istemcisi ve Azure AI Search REST API'leri kullanılır.

Azure Depolama'daki bir blob kapsayıcısında yer alan örnek verilerin (yapılandırılmamış metin ve görüntüler) içerik ayıklamasıyla başlayan indeksleyici, işlem hattındaki her adımı yönlendirir.

İçerik ayıklandıktan sonra beceri kümesi, bilgileri bulmak ve ayıklamak için Microsoft'tan yerleşik becerileri yürütür. Bu beceriler arasında resimlerde Optik Karakter Tanıma (OCR), metinde dil algılama, anahtar ifade ayıklama ve varlık tanıma (kuruluşlar) sayılabilir. Beceri kümesi tarafından oluşturulan yeni bilgiler bir dizindeki alanlara gönderilir. Dizin dolduruldıktan sonra sorgular, modeller ve filtrelerdeki alanları kullanabilirsiniz.

Prerequisites

Note

Bu öğretici için ücretsiz bir arama hizmeti kullanabilirsiniz. Ücretsiz katmanı sizi üç dizin, üç dizin oluşturucu ve üç veri kaynağıyla sınırlar. Bu öğretici her birinden bir tane oluşturur. Başlamadan önce, hizmetinizde yeni kaynakları kabul etmek için yer olduğundan emin olun.

Dosyaları indirme

Örnek veri deposunun zip dosyasını indirin ve içeriğini ayıklayın. Nasıl yapıldığını öğrenin.

Örnek verileri Azure Depolama'ya yükleme

  1. Azure Depolama'da yeni bir kapsayıcı oluşturun ve bunu cog-search-demo olarak adlandırın.

  2. Örnek veri dosyalarını karşıya yükleyin.

  3. Azure AI Search'te bağlantı formüle edebilmeniz için depolama bağlantı dizesi alın.

    1. Sol tarafta Erişim anahtarları'nı seçin.

    2. Birinci veya ikinci anahtar için bağlantı dizesi kopyalayın. bağlantı dizesi aşağıdaki örneğe benzer:

      DefaultEndpointsProtocol=https;AccountName=<your account name>;AccountKey=<your account key>;EndpointSuffix=core.windows.net

Döküm Araçları

Yerleşik yapay zeka zenginleştirmesi, Doğal dil ve görüntü işleme için Azure Dili ve Azure Görüntü İşleme dahil olmak üzere Döküm Araçları tarafından desteklenir. Bu öğretici gibi küçük iş yükleri için endeksleyici başına yirmi işlem olan ücretsiz kotayı kullanabilirsiniz. Daha büyük iş yükleri için Standart fiyatlandırma için beceri kümesine bir Microsoft Foundry kaynağı ekleyin .

Arama hizmeti URL'si ve API anahtarı kopyalama

Bu öğretici kapsamında, Azure AI Search bağlantıları için bir uç nokta ve bir API anahtarı gerekir. Bu değerleri Azure portalından alabilirsiniz.

  1. Azure portalında oturum açın ve arama hizmetinizi seçin.

  2. Sol bölmeden Genel Bakış'ı seçin ve uç noktayı kopyalayın. Şu biçimde olmalıdır: https://my-service.search.windows.net

  3. Sol bölmeden Ayarlar>Anahtarları'nı seçin ve hizmette tam haklar için bir yönetici anahtarı kopyalayın. İş sürekliliğini sağlamak için, birini değiştirmeniz gerektiğinde iki değiştirilebilir yönetici anahtarı sağlanmıştır. İsteklerde nesneleri eklemek, değiştirmek veya silmek için iki anahtardan birini kullanabilirsiniz.

    Azure portalındaki URL ve API anahtarlarının ekran görüntüsü.

REST dosyanızı ayarlama

  1. Visual Studio Code'ı başlatın ve skillset-tutorial.rest dosyasını açın. REST istemcisiyle ilgili yardıma ihtiyacınız varsa bkz . Hızlı Başlangıç: Tam metin araması .

  2. Değişkenler için değerler sağlayın: arama hizmeti uç noktası, arama hizmeti yöneticisi API anahtarı, dizin adı, Azure Depolama hesabınıza bağlantı dizesi ve blob kapsayıcı adı.

İşlem hattını oluştur

Yapay zeka zenginleştirmesi dizin oluşturucu temellidir. İzlenecek kılavuzun bu bölümü dört nesne oluşturur: veri kaynağı, dizin tanımı, beceri kümesi, dizin oluşturucu.

1. Adım: Veri kaynağı oluşturma

Veri dosyası örneklerini içeren Blob kapsayıcısına bağlantı dizesini ayarlamak için Veri Kaynağı Oluştur'u çağırın.

### Create a data source
POST {{baseUrl}}/datasources?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "name": "cog-search-demo-ds",
        "description": null,
        "type": "azureblob",
        "subtype": null,
        "credentials": {
            "connectionString": "{{storageConnectionString}}"
        },
        "container": {
            "name": "{{blobContainer}}",
            "query": null
        },
        "dataChangeDetectionPolicy": null,
        "dataDeletionDetectionPolicy": null
    }

2. Adım: Beceri kümesi oluşturma

İçeriğinize hangi zenginleştirme adımlarının uygulanacağını belirtmek için Beceri Kümesi Oluştur'u arayın. Bağımlılık olmadığı sürece beceriler paralel olarak yürütülür.

### Create a skillset
POST {{baseUrl}}/skillsets?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "name": "cog-search-demo-ss",
        "description": "Apply OCR, detect language, extract entities, and extract key-phrases.",
        "cognitiveServices": null,
        "skills":
        [
            {
            "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
            "context": "/document/normalized_images/*",
            "defaultLanguageCode": "en",
            "detectOrientation": true,
            "inputs": [
                {
                    "name": "image",
                    "source": "/document/normalized_images/*"
                }
            ],
            "outputs": [
                {
                    "name": "text"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.MergeSkill",
            "description": "Create merged_text, which includes all the textual representation of each image inserted at the right location in the content field. This is useful for PDF and other file formats that supported embedded images.",
            "context": "/document",
            "insertPreTag": " ",
            "insertPostTag": " ",
            "inputs": [
                {
                    "name":"text", 
                    "source": "/document/content"
                },
                {
                    "name": "itemsToInsert", 
                    "source": "/document/normalized_images/*/text"
                },
                {
                    "name":"offsets", 
                    "source": "/document/normalized_images/*/contentOffset" 
                }
            ],
            "outputs": [
                {
                    "name": "mergedText", 
                    "targetName" : "merged_text"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
            "textSplitMode": "pages",
            "maximumPageLength": 4000,
            "defaultLanguageCode": "en",
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_text"
                }
            ],
            "outputs": [
                {
                    "name": "textItems",
                    "targetName": "pages"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.LanguageDetectionSkill",
            "description": "If you have multilingual content, adding a language code is useful for filtering",
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_text"
                }
            ],
            "outputs": [
                {
                    "name": "languageName",
                    "targetName": "language"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill",
            "context": "/document/pages/*",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/pages/*"
                }
            ],
            "outputs": [
                {
                    "name": "keyPhrases",
                    "targetName": "keyPhrases"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
            "categories": ["Organization"],
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_text"
                }
            ],
            "outputs": [
                {
                    "name": "organizations",
                    "targetName": "organizations"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
            "categories": ["Location"],
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_text"
                }
            ],
            "outputs": [
                {
                    "name": "locations",
                    "targetName": "locations"
                }
            ]
            },
            {
            "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
            "categories": ["Person"],
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_text"
                }
            ],
            "outputs": [
                {
                    "name": "persons",
                    "targetName": "persons"
                }
            ]
            }
        ]
    }

Önemli noktalar:

  • İsteğin gövdesi aşağıdaki yerleşik becerileri belirtir:

    Skill Description
    Optik Karakter Tanıma Görüntü dosyalarındaki metinleri ve sayıları tanır.
    Metin Birleştirme Önceden ayrılmış içeriği yeniden birleştirilen "birleştirilmiş içerik" oluşturur; ekli görüntüleri olan belgeler (PDF, DOCX vb.) için kullanışlıdır. Resimler ve metinler, belgenin çatlama aşamasında ayrılır. Birleştirme becerisi, zenginleştirme sırasında oluşturulan tanınan metinleri, resim yazılarını veya etiketleri belgedeki görüntünün ayıklandığı konuma ekleyerek bunları yeniden birleştirir.

    Beceri kümesindeki birleştirilmiş içerikle çalışırken, bu düğüm OCR veya görüntü analizinden hiç geçmemiş yalnızca metin içeren belgeler de dahil olmak üzere belgedeki tüm metinleri kapsar.
    Dil Algılama Dili algılar ve ya bir dil adını ya da kodunu çıktısını verir. Çok dilli veri kümelerinde, dil alanı filtreler için yararlı olabilir.
    Varlık Tanıma Birleştirilmiş içerikten kişilerin, kuruluşların ve konumların adlarını ayıklar.
    Metin Bölme Anahtar tümcecik ayıklama becerisini çağırmadan önce büyük birleştirilmiş içeriği daha küçük parçalara ayırır. Anahtar tümcecik ayıklama, 50.000 veya daha az karakterden oluşan girişi kabul eder. Bu sınıra uymak için örnek dosyaların birkaç tanesinin bölünmesi gerekir.
    Anahtar İfade Çıkarımı En üstteki anahtar ifadeleri çıkarır.
  • Her beceri, belge içeriğinde yürütülür. İşleme sırasında Azure AI Search, farklı dosya biçimlerindeki içeriği okumak için her belgeyi kırıyor. Kaynak dosyadan gelen, bulunan metin, oluşturulan content alanına her belge için birer birer yerleştirilir. Bu nedenle, giriş olur "/document/content".

  • Anahtar ifade ayıklama için, büyük dosyaları sayfalara bölmek için metin bölücü becerisini kullandığımızdan, anahtar ifade ayıklama becerisinin bağlamı yerine (belgedeki her sayfa için) "document/pages/*"şeklindedir "/document/content" .

Note

Çıktılar bir dizine eşlenebilir, aşağı akış becerisine yönelik giriş olarak kullanılır veya dil kodunda olduğu gibi her iki şekilde de kullanılabilir. Dizinde bir dil kodu, filtreleme için yararlıdır. Beceri kümesi temelleri hakkında daha fazla bilgi için bkz. Beceri kümesini tanımlama.

3. Adım: Dizin oluşturma

Azure AI Search'te ters dizinleri ve diğer yapıları oluşturmak için kullanılan şemayı sağlamak için Dizin Oluştur'u çağırın.

Bir dizinin en büyük bileşeni, veri türü ve özniteliklerinin Azure AI Search'teki içeriği ve davranışı belirlediği alanlar koleksiyonudur. Yeni oluşturduğunuz çıktının alanlara sahip olduğundan emin olun.

### Create an index
POST {{baseUrl}}/indexes?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "name": "cog-search-demo-idx",
        "defaultScoringProfile": "",
        "fields": [
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "sortable": false,
                "filterable": false,
                "facetable": false
            },
            {
                "name": "text",
                "type": "Collection(Edm.String)",
                "facetable": false,
                "filterable": true,
                "searchable": true,
                "sortable": false
            },
            {
                "name": "language",
                "type": "Edm.String",
                "searchable": false,
                "sortable": true,
                "filterable": true,
                "facetable": false
            },
            {
                "name": "keyPhrases",
                "type": "Collection(Edm.String)",
                "searchable": true,
                "sortable": false,
                "filterable": true,
                "facetable": true
            },
            {
                "name": "organizations",
                "type": "Collection(Edm.String)",
                "searchable": true,
                "sortable": false,
                "filterable": true,
                "facetable": true
            },
            {
                "name": "persons",
                "type": "Collection(Edm.String)",
                "searchable": true,
                "sortable": false,
                "filterable": true,
                "facetable": true
            },
            {
                "name": "locations",
                "type": "Collection(Edm.String)",
                "searchable": true,
                "sortable": false,
                "filterable": true,
                "facetable": true
            },
            {
                "name": "metadata_storage_path",
                "type": "Edm.String",
                "key": true,
                "searchable": true,
                "sortable": false,
                "filterable": false,
                "facetable": false
            },
            {
                "name": "metadata_storage_name",
                "type": "Edm.String",
                "searchable": true,
                "sortable": false,
                "filterable": false,
                "facetable": false
            }
        ]
    }

4. Adım: Dizin oluşturucu oluşturma ve çalıştırma

İşlem hattını yönlendirmek için Create Indexer'ı çağırın. Şimdiye kadar oluşturduğunuz üç bileşen (veri kaynağı, beceri kümesi, dizin) bir dizin oluşturucuya girişlerdir. Azure AI Search'te dizin oluşturucunun oluşturulması, işlem hattının tamamını harekete geçirir.

Bu adımın tamamlanması birkaç dakika sürebilir. Veri kümesi küçük olsa da, analiz becerileri bilgi işlem açısından yoğundur.

### Create and run an indexer
POST {{baseUrl}}/indexers?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

    {
        "name": "cog-search-demo-idxr",
        "description": "",
        "dataSourceName" : "cog-search-demo-ds",
        "targetIndexName" : "cog-search-demo-idx",
        "skillsetName" : "cog-search-demo-ss",
        "fieldMappings" : [
            {
                "sourceFieldName" : "metadata_storage_path",
                "targetFieldName" : "metadata_storage_path",
                "mappingFunction" : { "name" : "base64Encode" }
            },
            {
                "sourceFieldName": "metadata_storage_name",
                "targetFieldName": "metadata_storage_name"
            }
        ],
        "outputFieldMappings" : 
        [
            {
                "sourceFieldName": "/document/merged_text",
                "targetFieldName": "content"
            },
            {
                "sourceFieldName" : "/document/normalized_images/*/text",
                "targetFieldName" : "text"
            },
            {
                "sourceFieldName" : "/document/organizations", 
                "targetFieldName" : "organizations"
            },
            {
                "sourceFieldName": "/document/language",
                "targetFieldName": "language"
            },
            {
                "sourceFieldName" : "/document/persons", 
                "targetFieldName" : "persons"
            },
            {
                "sourceFieldName" : "/document/locations", 
                "targetFieldName" : "locations"
            },
            {
                "sourceFieldName" : "/document/pages/*/keyPhrases/*", 
                "targetFieldName" : "keyPhrases"
            }
        ],
        "parameters":
        {
        "batchSize": 1,
        "maxFailedItems":-1,
        "maxFailedItemsPerBatch":-1,
        "configuration": 
            {
                "dataToExtract": "contentAndMetadata",
                "imageAction": "generateNormalizedImages"
            }
        }
    }

Önemli noktalar:

  • İsteğin gövdesinde önceki nesnelere başvurular, görüntü işleme için gereken yapılandırma özellikleri ve iki tür alan eşlemesi bulunur.

  • "fieldMappings" beceri kümesinden önce işlenir, veri kaynağından gelen içerik dizindeki hedef alanlara gönderilir. Var olan ve değiştirilmemiş içeriği dizine göndermek için alan eşlemelerini kullanırsınız. Alan adları ve türleri her iki uçta da aynıysa eşleme gerekmez.

  • "outputFieldMappings" beceri seti yürütüldükten sonra beceriler tarafından oluşturulan alanlar için kullanılır. Doküman parçalanana veya zenginleştirilene kadar sourceFieldName içindeki outputFieldMappings referansları mevcut değildir. targetFieldName, dizin şemasında tanımlanan dizindeki bir alandır.

  • "maxFailedItems" parametresi -1 olarak ayarlanır ve dizinleme motoruna veri içeri aktarımı sırasında hataları yoksaymasını bildirir. Tanıtım veri kaynağında çok az belge bulunduğundan bu kabul edilebilir bir durumdur. Daha büyük bir veri kaynağı için değeri, 0’dan daha büyük bir değere ayarlarsınız.

  • deyimi, "dataToExtract":"contentAndMetadata" dizin oluşturucuya blobun içerik özelliğinden ve her nesnenin meta verilerinden değerleri otomatik olarak ayıklamasını söyler.

  • parametresi, imageAction dizin oluşturucuya veri kaynağında bulunan görüntülerden metin ayıklamasını söyler. Yapılandırma "imageAction":"generateNormalizedImages" , OCR Becerisi ve Metin Birleştirme Becerisi ile birlikte dizin oluşturucuya görüntülerden metin ayıklamasını (örneğin, trafik Durdurma işaretinden "dur" sözcüğü) ve içerik alanının bir parçası olarak eklemesini söyler. Bu davranış hem eklenmiş görüntüler (PDF içindeki bir görüntüyü düşünün) hem de jpg dosyası gibi tek başına görüntü dosyaları için geçerlidir.

Note

Bir dizinleyici oluşturmak, işlem hattını tetikler. Verilere ulaşılırken, eşleme girişleri ve çıktıları veya işlemlerin sırası ile ilgili sorun olursa bunlar bu aşamada görüntülenir. İşlem hattını, kod veya betik değişiklikleriyle yeniden çalıştırmak için önce nesneleri bırakmanız gerekebilir. Daha fazla bilgi için bkz. Sıfırlama ve yeniden çalıştırma.

Dizinleme sürecini izleme

Dizin oluşturucu oluşturma isteğini gönderdiğiniz anda dizin oluşturma ve zenginleştirme başlar. Beceri kümesi karmaşıklığı ve işlemlerine bağlı olarak dizin oluşturma işlemi biraz zaman alabilir.

Dizin oluşturucunun hala çalışıp çalışmadığını öğrenmek için Dizin Oluşturucu Durumunu Al'ı çağırarak dizin oluşturucunun durumunu denetleyin.

### Get Indexer Status (wait several minutes for the indexer to complete)
GET {{baseUrl}}/indexers/cog-search-demo-idxr/status?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}

Önemli noktalar:

  • Uyarılar bazı senaryolarda yaygındır ve her zaman bir sorunu göstermez. Örneğin, bir blob kapsayıcısı görüntü dosyaları içeriyorsa ve işlem hattı görüntüleri işlemezse, görüntülerin işlenmediğini belirten bir uyarı alırsınız.

  • Bu örnekte metin içermeyen bir PNG dosyası vardır. Metin tabanlı becerilerin beşi de (dil algılama, konumların varlık tanıması, kuruluşlar, kişiler ve anahtar ifade ayıklama) bu dosyada yürütülememektedir. Sonuçta elde edilen bildirim yürütme geçmişinde gösterilir.

Sonuçları kontrol et

Yapay zeka tarafından oluşturulan içerik içeren bir dizin oluşturduğunuza göre sonuçları görmek için bazı sorgular çalıştırmak için Arama Belgeleri'ni çağırın.

### Query the index\
POST {{baseUrl}}/indexes/cog-search-demo-idx/docs/search?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}
  
  {
    "search": "*",
    "select": "metadata_storage_name,language,organizations",
    "count": true
  }

Filtreler, sonuçları ilgilendiğiniz öğelere daraltmanıza yardımcı olabilir:

### Filter by organization
POST {{baseUrl}}/indexes/cog-search-demo-idx/docs/search?api-version=2025-09-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{apiKey}}
  
  {
    "search": "*",
    "filter": "organizations/any(organizations: organizations eq 'Microsoft')",
    "select": "metadata_storage_name,organizations",
    "count": true
  }

Bu sorgular, Azure AI Search tarafından oluşturulan yeni alanlarda sorgu söz dizimi ve filtrelerle çalışma yollarından birkaçını gösterir. Daha fazla sorgu örneği için bkz . Belge Arama REST API'sindeki Örnekler, Basit söz dizimi sorgu örnekleri ve Tam Lucene sorgu örnekleri.

Sıfırla ve yeniden çalıştır

Geliştirmenin ilk aşamalarında, tasarım üzerinde yineleme yaygındır. Sıfırlama ve yeniden çalıştırma yinelemeye yardımcı olur.

Takeaways

Bu öğreticide, yapay zeka zenginleştirme işlem hattı oluşturmak için REST API'lerini kullanmaya yönelik temel adımlar gösterilmektedir: veri kaynağı, beceri kümesi, dizin ve dizin oluşturucu.

Girişler ve çıkışlar aracılığıyla becerileri zincirlemenin mekaniğine ilişkin beceri kümesi tanımıyla birlikte yerleşik beceriler tanıtıldı. Ayrıca dizin oluşturucu tanımında zenginleştirilmiş değerleri işlem hattından Azure AI Arama hizmeti aranabilir bir dizine yönlendirmek için gerekli olduğunu öğrendinizoutputFieldMappings.

Son olarak, daha fazla yineleme için sonuçların nasıl test edileceğini ve sistemin nasıl sıfırlanacağını öğrendiniz. Öğrendiniz ki dizine karşı sorgular düzenlendiğinde, zenginleştirilmiş dizin oluşturma işlem hattı tarafından oluşturulan çıktı döndürülür.

Kaynakları temizle

Kendi aboneliğinizde çalışırken, bir projenin sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar sana pahalıya mal olabilir. Kaynakları tek tek silebilir veya kaynak grubunu silip kaynak kümesinin tamamını silebilirsiniz.

Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak Kaynakları Azure portalında bulabilir ve yönetebilirsiniz.

Sonraki Adımlar

Artık yapay zeka zenginleştirme işlem hattındaki tüm nesneleri bildiğinize göre, beceri kümesi tanımlarına ve bireysel becerilere daha yakından bakın.