Aracılığıyla paylaş


Azure AI Search'te büyük veri kümelerini dizine ekleme

Arama çözümü gereksinimleriniz büyük verilerin veya karmaşık verilerin dizinini oluşturmayı kapsıyorsa, bu makalede Azure AI Search'te uzun süre çalışan işlemleri karşılamaya yönelik stratejiler açıklanmaktadır.

Bu makalede, verileri içeri aktarmaya yönelik iki temel yaklaşım hakkında bilgi sahibi olduğunuz varsayılır: verileri dizine gönderme veya arama dizin oluşturucu kullanarak desteklenen bir veri kaynağından veri çekme. Senaryonuz hesaplama açısından yoğun yapay zeka zenginleştirmesi içeriyorsa, dizin oluşturuculara beceri kümesi bağımlılığı göz önüne alındığında dizin oluşturucular gereklidir.

Bu makale, dizin ve sorgu tasarımıyla ilgili en iyi yöntemleri sunan daha iyi performans için İpuçları tamamlar. Yalnızca ihtiyacınız olan alanları ve öznitelikleri içeren iyi tasarlanmış bir dizin, büyük ölçekli dizin oluşturma için önemli bir önkoşuldur.

Bölüm başına daha yüksek depolama alanı için 3 Nisan 2024'e kadar oluşturulan daha yeni bir arama hizmeti kullanmanızı öneririz.

Not

Bu makalede açıklanan stratejilerde tek bir büyük veri kaynağı olduğu varsayılır. Çözümünüz birden çok veri kaynağından dizin oluşturmayı gerektiriyorsa önerilen bir yaklaşım için bkz . Azure AI Search'te birden çok veri kaynağını dizinleme.

Gönderme API'lerini kullanarak büyük verileri dizine oluşturma

Belgeler Dizini REST API'si veya IndexDocuments yöntemi (.NET için Azure SDK) gibi "Gönderme" API'leri, Azure AI Search'teki en yaygın dizin oluşturma biçimidir. Gönderme API'sini kullanan çözümler için, uzun süre çalışan dizin oluşturma stratejisi aşağıdaki bileşenlerden birine veya her ikisine de sahip olur:

  • Belgeleri toplu olarak oluşturma
  • İş parçacıklarını yönetme

İstek başına birden çok belgeyi toplu iş

Büyük miktarda verinin dizinini oluşturmak için basit bir mekanizma, tek bir istekte birden çok belge veya kayıt göndermektir. Yükün tamamı 16 MB'ın altında olduğu sürece, bir istek toplu karşıya yükleme işleminde en fazla 1000 belge işleyebilir. Bu sınırlar, Belgeler Dizini REST API'sini veya .NET SDK'sında IndexDocuments yöntemini kullanmanız fark etmez. Her iki API için de her isteğin gövdesinde 1000 belge paketleyebilirsiniz.

Belgeleri toplu olarak oluşturmak, büyük bir veri hacminde çalışmak için gereken süreyi önemli ölçüde kısaltır. Verileriniz için en uygun toplu iş boyutunu belirlemek, dizin oluşturma hızlarını iyileştirmenin önemli bir bileşenidir. En uygun toplu iş boyutunu etkileyen iki birincil faktör şunlardır:

  • Dizininizin şeması
  • Verilerinizin boyutu

En uygun toplu iş boyutu dizininize ve verilerinize bağlı olduğundan, en iyi yaklaşım farklı toplu iş boyutlarını test ederek hangisinin senaryonuz için en yüksek dizin oluşturma hızlarına neden olduğunu belirlemektir. Öğretici: Gönderme API'siyle dizin oluşturmayı iyileştirme, .NET SDK'sını kullanarak toplu iş boyutlarını test etmek için örnek kod sağlar.

İş parçacıkları ve yeniden deneme stratejisi ekleme

Dizin oluşturucuların yerleşik iş parçacığı yönetimi vardır, ancak gönderme API'lerini kullanırken uygulama kodunuzun iş parçacıklarını yönetmesi gerekir. Özellikle son zamanlarda bölümleri artırdıysanız veya daha yüksek bir katman arama hizmetine yükselttiyseniz kullanılabilir kapasiteden tam olarak yararlanmak için yeterli iş parçacıkları olduğundan emin olun.

  1. İstemci kodunuzda eşzamanlı iş parçacığı sayısını artırın.

  2. Arama hizmetine isabet eden istekleri artırdığınızda, isteğin tam olarak başarılı olmadığını belirten HTTP durum kodlarıyla karşılaşabilirsiniz. Dizin oluşturma sırasında iki yaygın HTTP durum kodu şunlardır:

    • 503 Hizmet Kullanılamıyor - Bu hata, sistemin ağır yük altında olduğu ve isteğinizin şu anda işlenebileceği anlamına gelir.

    • 207 Çoklu Durum - Bu hata bazı belgelerin başarılı olduğu, ancak en az birinin başarısız olduğu anlamına gelir.

  3. Hataları işlemek için isteklerin üstel geri alma yeniden deneme stratejisi kullanılarak yeniden denenmesi gerekir.

Azure .NET SDK'sı 503'leri ve diğer başarısız istekleri otomatik olarak yeniden dener, ancak 207'leri yeniden denemek için kendi mantığınızı uygulamanız gerekir. Polly gibi açık kaynak araçlar da bir yeniden deneme stratejisi uygulamak için kullanılabilir.

Dizin oluşturucular ve "çekme" API'leri ile dizin oluşturma

Dizin oluşturucular , uzun süre çalışan işlemler için yararlı olan çeşitli özelliklere sahiptir:

  • Belgeleri toplu olarak oluşturma
  • Bölümlenmiş veriler üzerinde paralel dizin oluşturma
  • Zaman içinde yalnızca yeni dizin oluşturma ve belgeleri değiştirme için zamanlama ve değişiklik algılama

Dizin oluşturucu zamanlamaları, bilinen son durdurma noktasında işlemeye devam edebilir. Veriler işleme penceresinde tam olarak dizine alınmazsa, değişiklik algılaması sağlayan bir veri kaynağı kullandığınız varsayılarak dizin oluşturucu bir sonraki çalıştırmada kaldığı yerden devam eder.

Verilerin daha küçük ayrı veri kaynaklarına bölümlenmesi paralel işlemeye olanak tanır. Azure Blob Depolama'da birden çok kapsayıcıya bölme, her bölüm için bir veri kaynağı oluşturma ve ardından dizin oluşturucuları arama hizmetinizin arama birimi sayısına bağlı olarak paralel olarak çalıştırma gibi kaynak verileri ayırabilirsiniz.

Dizin oluşturucu toplu iş boyutunu denetleme

Gönderme API'sinde olduğu gibi dizin oluşturucular da toplu iş başına öğe sayısını yapılandırmanıza olanak sağlar. Dizin Oluşturucu REST API'sini temel alan dizin oluşturucular için, bu ayarı verilerinizin batchSize özellikleriyle daha iyi eşleşecek şekilde özelleştirmek için bağımsız değişkenini ayarlayabilirsiniz.

Varsayılan toplu iş boyutları veri kaynağına özeldir. Azure SQL Veritabanı ve Azure Cosmos DB'nin varsayılan toplu iş boyutu 1000'tir. Buna karşılık, Azure Blob dizin oluşturma, daha büyük ortalama belge boyutunun tanınması için toplu iş boyutunu 10 belgede ayarlar.

Uzun süre çalışan işlemler için dizin oluşturucuları zamanlama

Dizin oluşturucu zamanlaması, büyük veri kümelerini işlemeye ve zenginleştirme işlem hattında görüntü analizi gibi yavaş çalışan işlemleri kabul etmeye yönelik önemli bir mekanizmadır.

Dizin oluşturucu işleme genellikle 2 saatlik bir süre içinde çalışır. Dizin oluşturma iş yükünün tamamlanması saatler yerine günler sürüyorsa, dizin oluşturucuyu iki saatte bir başlayan ardışık, yinelenen bir zamanlamaya yerleştirebilirsiniz. Veri kaynağında değişiklik izlemenin etkinleştirildiği varsayıldığında, dizin oluşturucu son kaldığı yerden işlemeye devam eder. Bu tempoda, dizin oluşturucu tüm işlenmemiş belgeler işlenene kadar bir dizi gün boyunca belge kapsamı boyunca çalışabilir.

{
    "dataSourceName" : "hotels-ds",
    "targetIndexName" : "hotels-idx",
    "schedule" : { "interval" : "PT2H", "startTime" : "2024-01-01T00:00:00Z" }
}

Veri kaynağında artık yeni veya güncelleştirilmiş belge kalmadığında, dizin oluşturucu yürütme geçmişi işlenen belgeleri bildirir 0/0 ve hiçbir işlem gerçekleşmez.

Zamanlamaları ayarlama hakkında daha fazla bilgi için bkz . Dizin Oluşturucu REST API'sini oluşturma veya Bkz . Azure AI Search için dizin oluşturucuları zamanlama.

Not

Eski bir çalışma zamanı mimarisinde çalışan bazı dizin oluşturucuların en fazla 2 saatlik işlem penceresi yerine 24 saat vardır. 2 saatlik sınır, dahili olarak yönetilen çok kiracılı bir ortamda çalışan daha yeni içerik işlemcileri içindir. Mümkün olduğunda Azure AI Search, dizin oluşturucu ve beceri kümesi işlemesini çok kiracılı ortama boşaltmaya çalışır. Dizin oluşturucu geçirilemiyorsa özel ortamda çalışır ve 24 saat kadar çalışabilir. Bu özellikleri sergileyen bir dizin oluşturucu zamanlaması gerçekleştiriyorsanız 24 saatlik bir işlem penceresi olduğunu varsayalım.

Dizin oluşturucuları paralel olarak çalıştırma

Verilerinizi bölümlerseniz, her veri kaynağından çekip aynı arama dizinine yazan birden çok dizin oluşturucu-veri kaynağı bileşimi oluşturabilirsiniz. Her dizin oluşturucu ayrı olduğundan, bir arama dizinini sıralı olarak çalıştırdığınızdan daha hızlı doldurarak bunları aynı anda çalıştırabilirsiniz.

Yeterli kapasiteye sahip olduğunuzdan emin olun. Hizmetinizdeki bir arama birimi herhangi bir zamanda bir dizin oluşturucu çalıştırabilir. Birden çok dizin oluşturucu oluşturmak yalnızca paralel olarak çalıştırabiliyorlarsa yararlıdır.

Aynı anda çalıştırabilen dizin oluşturma işlerinin sayısı, metin tabanlı ve beceri tabanlı dizin oluşturma için farklılık gösterir. Daha fazla bilgi için bkz . Dizin oluşturucu yürütme.

Veri kaynağınız bir Azure Blob Depolama kapsayıcısı veya Azure Data Lake Depolama 2. Nesil ise, bu işlem tamamlanana kadar çok sayıda blobu numaralandırmak uzun sürebilir (hatta saatler). Bu, dizin oluşturucunuzun başarılı belge sayısının bu süre boyunca artmamasına neden olur ve başarılı olduğunda herhangi bir ilerleme kaydetmiyor gibi görünebilir. Çok sayıda blob için belge işlemenin daha hızlı olmasını istiyorsanız, verilerinizi birden çok kapsayıcıya bölmeyi ve tek bir dizine işaret eden paralel dizin oluşturucular oluşturmayı göz önünde bulundurun.

  1. Azure portalında oturum açın ve arama hizmetiniz tarafından kullanılan arama birimi sayısını denetleyin. Sayfanın üst kısmındaki sayıyı görüntülemek için Ayarlar> Scale'i seçin. Paralel olarak çalıştırılacak dizin oluşturucu sayısı, arama birimi sayısına yaklaşık olarak eşittir.

  2. Kaynak verileri birden çok kapsayıcı veya aynı kapsayıcı içindeki birden çok sanal klasör arasında bölümleme.

  3. Her bölüm için bir tane olmak üzere kendi dizin oluşturucuyla eşleştirilmiş birden çok veri kaynağı oluşturun.

  4. Her dizin oluşturucuda aynı hedef arama dizinini belirtin.

  5. Dizin oluşturucuları zamanlayın.

  6. Onay için dizin oluşturucu durumunu ve yürütme geçmişini gözden geçirin.

Paralel dizin oluşturmayla ilgili bazı riskler vardır. İlk olarak, dizin oluşturmanın arka planda çalışmadığını ve sorguların kısıtlanma veya bırakılma olasılığını artırdığını hatırlayın.

İkincisi, Azure AI Search güncelleştirmeler için dizini kilitlemez. Eşzamanlı yazma işlemleri yönetilir ve belirli bir yazma işlemi ilk denemede başarılı olmazsa yeniden deneme çağrılır, ancak dizin oluşturma hatalarında bir artış fark edebilirsiniz.

Birden çok indexer-data-source kümesi aynı dizini hedeflese de, dizindeki mevcut değerlerin üzerine yazabilen dizin oluşturucu çalıştırmalarına dikkat edin. İkinci bir dizin oluşturucu-veri kaynağı aynı belgeleri ve alanları hedeflerse, ilk çalıştırmadaki tüm değerlerin üzerine yazılır. Alan değerleri tam olarak değiştirilir; Dizin oluşturucu birden çok çalıştırmadaki değerleri aynı alanla birleştiremez.

Spark'ta büyük veri dizini oluşturma

Büyük bir veri mimariniz varsa ve verileriniz bir Spark kümesindeyse, verileri yüklemek ve dizin oluşturmak için SynapseML'yi öneririz. Öğretici, yapay zeka zenginleştirmesi için Azure AI hizmetlerini çağırma adımlarını içerir, ancak metin dizini oluşturmak için AzureSearchWriter API'sini de kullanabilirsiniz.

Ayrıca bkz.