Azure AI Search'te JSON bloblarını ve dosyalarını dizine ekleme

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

Azure AI Search'te blob dizini oluşturma için bu makalede, JSON belgelerinden oluşan bloblar veya dosyalar için özelliklerin nasıl ayarlanacağı gösterilmektedir. Azure Blob Depolama veya Azure Dosyalar JSON dosyaları genellikle şu formlardan herhangi birini varsayar:

  • Tek bir JSON belgesi
  • İyi biçimlendirilmiş JSON öğeleri dizisi içeren bir JSON belgesi
  • Birden çok varlık içeren ve yeni satırla ayrılmış bir JSON belgesi

Blob dizin oluşturucu, JSON yapısına göre arama belgesinin çıkışını iyileştirmek için bir parsingMode parametre sağlar. Ayrıştırma modları aşağıdaki seçeneklerden oluşur:

parsingMode JSON belgesi Açıklama
json Blob başına bir tane (varsayılan) JSON bloblarını tek bir metin öbekleri olarak ayrıştırıyor. Her JSON blobu tek bir arama belgesine dönüşür.
jsonArray Blob başına birden çok Blobda bir JSON dizisini ayrıştırarak dizinin her öğesi ayrı bir arama belgesine dönüşür.
jsonLines Blob başına birden çok Birden çok JSON varlığı (aynı zamanda bir dizi) içeren bir blobu ayrıştırarak tek tek öğeleri yeni bir satırla ayırır. Dizin oluşturucu, her yeni satırdan sonra yeni bir arama belgesi başlatır.

Hem hem de jsonArrayjsonLinesiçin, blob dizin oluşturucusunun aynı blobdan oluşturulan birden çok arama belgesi için belge anahtarının kesinleştirmesini nasıl işlediğini anlamak üzere birçok arama belgesi oluşturmak üzere Bir blobun dizinini oluşturma'yı gözden geçirmeniz gerekir.

Dizin oluşturucu tanımında, hedef arama dizininizi doldurmak için kaynak JSON belgesinin hangi özelliklerinin kullanılacağını seçmek için isteğe bağlı olarak alan eşlemeleri ayarlayabilirsiniz. Örneğin, ayrıştırma modunu kullanırken jsonArray , dizi alt düzey bir özellik olarak varsa, dizinin blob içine yerleştirildiği yeri belirten bir "documentRoot" özelliği ayarlayabilirsiniz.

Not

JSON ayrıştırma modu kullanıldığında, Azure AI Search tüm blobların aynı ayrıştırıcıyı (için veya jsonLinesiçinjsonjsonArray) kullandığını varsayar. Aynı veri kaynağında farklı dosya türlerinin bir karışımı varsa, hangi dosyaların içeri aktarılacağını denetlemek için dosya uzantısı filtrelerini kullanmayı göz önünde bulundurun.

Aşağıdaki bölümlerde her mod daha ayrıntılı olarak açıklanmaktadır. Dizin oluşturucu istemcilerini ve kavramlarını bilmiyorsanız bkz . Arama dizin oluşturucu oluşturma. Burada yinelenmeyen temel blob dizin oluşturucu yapılandırmasının ayrıntılarını da biliyor olmalısınız.

Tek JSON belgelerini dizine alma (blob başına bir tane)

Varsayılan olarak, blob dizin oluşturucuları JSON bloblarını tek bir metin öbekleri olarak ayrıştırır ve kapsayıcıdaki her blob için bir arama belgesi oluşturur. JSON yapılandırılmışsa, arama belgesi tek tek alanlar olarak temsil edilen tek tek öğelerle bu yapıyı yansıtabilir. Örneğin, Azure Blob Depolama aşağıdaki JSON belgesine sahip olduğunuzu varsayalım:

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

Blob dizin oluşturucu, JSON belgesini tek bir arama belgesine ayrıştırır ve kaynaktan "text", "datePublished" ve "tags" değerlerini aynı adlı ve yazılan hedef dizin alanlarıyla eşleştirerek bir dizin yükler. "text", "datePublished ve "tags" alanlarına sahip bir dizin verildiğinde, blob dizin oluşturucu istekte alan eşlemesi olmadan doğru eşlemeyi çıkarsayabilir.

Varsayılan davranış JSON blobu başına bir arama belgesi olsa da ayrıştırma modunun ayarlanması json içerik için iç alan eşlemelerini değiştirerek içindeki content alanları arama dizinindeki gerçek alanlara yükseltmeyi sağlar. Ayrıştırma modu için json örnek bir dizin oluşturucu tanımı şöyle görünebilir:

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

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

Not

Tüm dizin oluşturucularda olduğu gibi, alanlar açıkça eşleşmiyorsa, temel blob dizin oluşturucu yapılandırmasında açıklandığı gibi blob içeriği ve meta veriler için kullanılabilen örtük alan eşlemelerini kullanmadığınız sürece tek tek alan eşlemelerini açıkça belirtmeniz gerekir.

json örneği (tek otel JSON dosyaları)

GitHub'da otel JSON belgesi veri kümesi , her blobun yapılandırılmış bir JSON dosyasını temsil ettiği JSON ayrıştırma işlemini test etme konusunda yararlıdır. Veri dosyalarını Blob Depolama yükleyebilir ve bu içeriğin tek tek arama belgelerine nasıl ayrıştırılacağını hızlı bir şekilde değerlendirmek için Verileri içeri aktarma sihirbazını kullanabilirsiniz.

Veri kümesi, her biri adres koleksiyonu ve oda koleksiyonu içeren bir otel belgesi içeren beş blobdan oluşur. Blob dizin oluşturucu hem koleksiyonları algılar hem de dizin şemasındaki giriş belgelerinin yapısını yansıtır.

JSON dizilerini ayrıştırma

Alternatif olarak, JSON dizisi seçeneğini kullanabilirsiniz. Bloblar iyi biçimlendirilmiş bir JSON nesneleri dizisi içerdiğinde ve her öğenin ayrı bir arama belgesi olmasını istediğinizde bu seçenek kullanışlıdır. kullanılarakjsonArrays, aşağıdaki JSON blobu her biri ve "text" alanları olan "id" üç ayrı belge oluşturur.

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

parameters Dizin oluşturucudaki özelliği ayrıştırma modu değerleri içerir. JSON dizisi için dizin oluşturucu tanımı aşağıdaki örneğe benzer olmalıdır.

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

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

jsonArrays örneği

GitHub'daki New York Filarmoni JSON veri kümesi , JSON dizi ayrıştırma işlemini test etmede yararlıdır. Bu içeriğin tek tek arama belgelerine nasıl ayrıştırılacağını hızla değerlendirmek için veri dosyalarını Blob depolamaya yükleyebilir ve Verileri içeri aktarma sihirbazını kullanabilirsiniz.

Veri kümesi, toplam 100 varlık için her biri JSON varlık dizisi içeren sekiz blobdan oluşur. Varlıklar hangi alanların doldurulacaklarına göre değişir, ancak sonuç, tüm bloblardaki tüm dizilerden varlık başına bir arama belgesidir.

İç içe JSON dizilerini ayrıştırma

İç içe öğelere sahip JSON dizileri için, çok düzeyli bir yapıyı belirtmek için belirtebilirsiniz documentRoot . Örneğin, bloblarınız aşağıdaki gibi görünüyorsa:

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

Özelliğinde yer alan diziyi dizine almak için bu yapılandırmayı level2 kullanın:

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

JSON varlıklarını yeni satırlarla ayırarak ayrıştırma

Blobunuz yeni satırla ayrılmış birden çok JSON varlığı içeriyorsa ve her öğenin ayrı bir arama belgesi olmasını istiyorsanız kullanın jsonLines.

{ "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.

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

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

JSON alanlarını arama alanlarına eşleme

Alan eşlemeleri, alan adlarının ve türlerinin aynı olmadığı durumlarda bir kaynak alanı hedef alanla ilişkilendirir. Ancak, alan eşlemeleri bir JSON belgesinin bölümlerini eşleştirmek ve bunları arama belgesinin en üst düzey alanlarına "kaldırmak" için de kullanılabilir.

Aşağıdaki örnek bu senaryoyu göstermektedir. Genel olarak alan eşlemeleri hakkında daha fazla bilgi için bkz . alan eşlemeleri.

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

Aşağıdaki alanlara sahip bir arama dizini varsayın: text türünde Edm.String, dateEdm.DateTimeOffsetve tags türünde Collection(Edm.String). Dizindeki kaynak ve date alandaki "datePublished" arasındaki tutarsızlıklara dikkat edin. JSON'unuzu istenen şekle eşlemek için aşağıdaki alan eşlemelerini kullanın:

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

Kaynak alanlar JSON İşaretçisi gösterimi kullanılarak belirtilir. JSON belgenizin köküne başvurmak için eğik çizgiyle başlarsınız, sonra eğik çizgiyle ayrılmış yolu kullanarak istenen özelliği (rastgele iç içe yerleştirme düzeyinde) seçersiniz.

Sıfır tabanlı bir dizin kullanarak tek tek dizi öğelerine de başvurabilirsiniz. Örneğin, yukarıdaki örnekten "tags" dizisinin ilk öğesini seçmek için aşağıdaki gibi bir alan eşlemesi kullanın:

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

Not

"sourceFieldName" JSON blobunda bulunmayan bir özelliğe başvuruyorsa, bu eşleme hatasız atlanır. Bu davranış, farklı bir şemaya (yaygın bir kullanım örneği) sahip JSON blobları için dizin oluşturmanın devam etmesini sağlar. Doğrulama denetimi olmadığından, yanlış nedenden dolayı belgeleri kaybetmemek için eşlemeleri yazım hataları için dikkatli bir şekilde denetleyin.

Sonraki adımlar