Birden çok arama belgesi oluşturmak için blobların ve dosyaların dizinini oluşturma

Şunlar için geçerlidir: Blob dizin oluşturucuları, Dosya dizin oluşturucuları

Varsayılan olarak, dizin oluşturucu bir blobun veya dosyanın içeriğini tek bir arama belgesi olarak ele alır. Arama dizininde daha ayrıntılı bir gösterim istiyorsanız, bir blob veya dosyadan birden çok arama belgesi oluşturmak için parsingMode değerlerini ayarlayabilirsiniz. Birçok arama belgesine neden olan parsingMode değerleri şunlardır delimitedText : (CSV için) veya jsonArrayjsonLines (JSON için).

Bu ayrıştırma modlarından herhangi birini kullandığınızda, ortaya çıkan yeni arama belgelerinin benzersiz belge anahtarları olmalıdır ve bu değerin nereden geldiğini belirlemede bir sorun ortaya çıkar. Üst blobun biçiminde metadata_storage_path propertyen az bir benzersiz değeri vardır, ancak bu değeri birden fazla arama belgesine katkıda bulunuyorsa anahtar artık dizinde benzersiz değildir.

Bu sorunu gidermek için blob dizin oluşturucu, tek blob üst öğesinden oluşturulan her alt arama belgesini benzersiz olarak tanımlayan bir AzureSearch_DocumentKey oluşturur. Bu makalede bu özelliğin nasıl çalıştığı açıklanmaktadır.

Bire çok belge anahtarı

Dizindeki her belge bir belge anahtarıyla benzersiz olarak tanımlanır. Ayrıştırma modu belirtilmediğinde ve arama belgesi anahtarı için dizin oluşturucu tanımında açık alan eşlemesi yoksa, blob dizin oluşturucu otomatik olarak öğesini belge anahtarı olarak eşlermetadata_storage_path property. Bu varsayılan eşleme, her blobun ayrı bir arama belgesi olarak görünmesini sağlar ve bu alan eşlemesini kendiniz oluşturma adımını kaydeder (normalde, yalnızca aynı adlara ve türlere sahip alanlar otomatik olarak eşlenir).

Bire çok arama belgesi senaryosunda, tabanlı metadata_storage_path property örtük bir belge anahtarı mümkün değildir. Geçici bir çözüm olarak, Azure AI Search bir blobdan ayıklanan her bir varlık için bir belge anahtarı oluşturabilir. Oluşturulan anahtar adlandırılır AzureSearch_DocumentKey ve her arama belgesine eklenir. Dizin oluşturucu, her blobdan oluşturulan "çok sayıda belgeyi" izler ve kaynak veriler zaman içinde değiştiğinde arama dizinine yönelik güncelleştirmeleri hedefleyebilir.

Varsayılan olarak, anahtar dizini alanı için açık alan eşlemeleri belirtilmediğinde, AzureSearch_DocumentKey alan eşleme işlevi kullanılarak base64Encode öğesine eşlenir.

Örnek

Aşağıdaki alanlara sahip bir dizin tanımı varsayın:

  • id
  • temperature
  • pressure
  • timestamp

Blob kapsayıcınızda aşağıdaki yapıya sahip bloblar vardır:

Blob1.json

{ "temperature": 100, "pressure": 100, "timestamp": "2024-02-13T00:00:00Z" }
{ "temperature" : 33, "pressure" : 30, "timestamp": "2024-02-14T00:00:00Z" }

Blob2.json

{ "temperature": 1, "pressure": 1, "timestamp": "2023-01-12T00:00:00Z" }
{ "temperature" : 120, "pressure" : 3, "timestamp": "2022-05-11T00:00:00Z" }

Bir dizin oluşturucu oluşturduğunuzda ve anahtar alanı için açık alan eşlemeleri belirtmeden parsingModejsonLines değerini olarak ayarladığınızda, aşağıdaki eşleme örtük olarak uygulanır.

{
    "sourceFieldName" : "AzureSearch_DocumentKey",
    "targetFieldName": "id",
    "mappingFunction": { "name" : "base64Encode" }
}

Bu kurulum, aşağıdaki çizime benzer şekilde belirsiz belge anahtarlarıyla sonuçlanır (base64 ile kodlanmış kimlik kısalmak üzere kısaltılmıştır).

Kimlik sıcaklık basınç timestamp
aHR0 ... YjEuanNvbjsx 100 100 2024-02-13T00:00:00Z
aHR0 ... YjEuanNvbjsy 33 30 2024-02-14T00:00:00Z
aHR0 ... YjIuanNvbjsx 1 1 2023-01-12T00:00:00Z
aHR0 ... YjIuanNvbjsy 120 3 2022-05-11T00:00:00Z

Dizin anahtarı alanı için özel alan eşlemesi

Önceki örnekle aynı dizin tanımını varsayarsak blob kapsayıcınızda aşağıdaki yapıya sahip bloblar olduğunu varsayalım:

Blob1.json

recordid, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z" 
2, 33, 30,"2024-02-14T00:00:00Z" 

Blob2.json

recordid, temperature, pressure, timestamp
1, 1, 1,"20123-01-12T00:00:00Z" 
2, 120, 3,"2022-05-11T00:00:00Z" 

parsingMode ile delimitedTextbir dizin oluşturucu oluşturduğunuzda, anahtar alanına aşağıdaki gibi bir alan eşleme işlevi ayarlamak doğal görünebilir:

{
    "sourceFieldName" : "recordid",
    "targetFieldName": "id"
}

Ancak bu eşleme, alan bloblar arasında benzersiz olmadığından dizinde dört belgenin gösterilmesine recordid neden olmaz. Bu nedenle, "bire çok" ayrıştırma modları için özelliğinden AzureSearch_DocumentKey anahtar dizin alanına uygulanan örtük alan eşlemesini kullanmanızı öneririz.

Açık bir alan eşlemesi ayarlamak istiyorsanız sourceField değerinin tüm bloblardaki her bir varlık için ayrı olduğundan emin olun.

Not

Ayıklanan varlık başına benzersizlik sağlamak için AzureSearch_DocumentKey kullanılan yaklaşım değiştirilebilir ve bu nedenle uygulamanızın ihtiyaçları için bu değere güvenmemelisiniz.

Verilerinizde dizin anahtarı alanını belirtin

Önceki örnek ve ayrıştırmaMode ile aynı dizin tanımının açık alan eşlemeleri belirtilmeden olarak ayarlandığını jsonLines ve dolayısıyla eşlemelerin ilk örnekteki gibi göründüğünü varsayarsak, blob kapsayıcınızda aşağıdaki yapıya sahip bloblar olduğunu varsayalım:

Blob1.json

id, temperature, pressure, timestamp
1, 100, 100,"2024-02-13T00:00:00Z" 
2, 33, 30,"2024-02-14T00:00:00Z"

Blob2.json

id, temperature, pressure, timestamp
1, 1, 1,"2023-01-12T00:00:00Z" 
2, 120, 3,"2022-05-11T00:00:00Z" 

Her belgenin, dizindeki id alan olarak tanımlanan alanını içerdiğine key dikkat edin. Böyle bir durumda, benzersiz bir belge AzureSearch_DocumentKey oluşturulsa bile, belge için "anahtar" olarak kullanılmaz. Bunun yerine, alanın değeri id alana eşlenir key

Önceki örneğe benzer şekilde, alan bloblar arasında benzersiz olmadığından bu eşleme dizinde dört belgenin gösterilmesine id neden olmaz. Bu durumda, öğesini belirten herhangi bir id json girdisi, yeni bir belgenin karşıya yüklenmesi yerine var olan belgede birleştirmeye neden olur ve dizinin durumu belirtilen idile en son okuma girdisini yansıtır.

Sonraki adımlar

Blob dizin oluşturmanın temel yapısı ve iş akışı hakkında bilgi sahibi değilseniz önce Azure AI Search ile dizin oluşturma Azure Blob Depolama gözden geçirmeniz gerekir. Farklı blob içerik türleri için ayrıştırma modları hakkında daha fazla bilgi için aşağıdaki makaleleri gözden geçirin.