Zenginleştirilmiş çıkışı Azure AI Search'teki arama dizinindeki alanlarla eşleme

Dizin Oluşturucu Aşamaları

Bu makalede, çıktı alanı eşlemelerinin nasıl ayarlanacağı, beceri kümesi işleme sırasında oluşturulan bellek içi veri yapıları ile arama dizinindeki hedef alanlar arasında veri yolu tanımlama işlemleri açıklanmaktadır. Çıkış alanı eşlemesi bir dizin oluşturucuda tanımlanır ve aşağıdaki öğelere sahiptir:

"outputFieldMappings": [
  {
    "sourceFieldName": "document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],

İki fiziksel veri yapısı arasındaki yolu eşleyen tanımın aksine fieldMappings , tanım outputFieldMappings bellek içi zenginleştirmeleri arama dizinindeki alanlarla eşler.

Dizin oluşturucunuzun metin çevirisi veya anahtar tümcecik ayıklama gibi yeni bilgiler oluşturan ekli bir beceri kümesi varsa çıkış alanı eşlemeleri gereklidir. Dizin oluşturucu yürütme sırasında yapay zeka tarafından oluşturulan bilgiler yalnızca bellekte bulunur. Bu bilgileri bir arama dizininde kalıcı hale getirmek için dizin oluşturucuya verilerin nereye gönderileceği bildirmelisiniz.

Çıkış alanı eşlemeleri, bir kaynak belgenin karmaşık türündeki belirli düğümleri almak için de kullanılabilir. Örneğin, çok parçalı bir "FullName" özelliğinde yalnızca "FullName/LastName" olmasını isteyebilirsiniz. Tam karmaşık yapıya ihtiyacınız olmadığında, iç içe veri yapılarında tek tek düğümleri düzleştirebilir ve ardından çıkışı arama dizininizdeki bir dize koleksiyonuna göndermek için bir çıkış alanı eşlemesi kullanabilirsiniz.

Çıkış alanı eşlemeleri şuna uygulanır:

  • Becerilerle oluşturulan veya dizin oluşturucu tarafından ayıklanan bellek içi içerik. Kaynak alan, zenginleştirilmiş belge ağacındaki bir düğümdür.

  • Arama dizinleri. Bilgi deposu dolduruyorsanız veri yolu yapılandırması için projeksiyonları kullanın. Vektör alanlarını dolduruyorsanız çıkış alanı eşlemeleri kullanılmaz.

Çıktı alanı eşlemeleri beceri kümesi yürütmesi sonrasında veya ilişkili beceri kümesi yoksa belgenin kırılması sonrasında uygulanır.

Çıkış alanı eşlemesi tanımlama

Çıkış alanı eşlemeleri dizin oluşturucu tanımında diziye outputFieldMappings eklenir ve genellikle dizinin arkasına fieldMappings yerleştirilir. Çıkış alanı eşlemesi üç bölümden oluşur.

"fieldMappings": []
"outputFieldMappings": [
  {
    "sourceFieldName": "/document/path-to-a-node-in-an-enriched-document",
    "targetFieldName": "some-search-field-in-an-index",
    "mappingFunction": null
  }
],
Özellik Açıklama
sourceFieldName Gerekli. Zenginleştirilmiş içeriğin yolunu belirtir. Bir örnek olabilir /document/content. Yol söz dizimi ve örnekler için bkz . Azure AI Search beceri kümesinde başvuru zenginleştirmeleri.
targetFieldName isteğe bağlı. Zenginleştirilmiş içeriği alan arama alanını belirtir. Hedef alanlar üst düzey basit alanlar veya koleksiyonlar olmalıdır. Karmaşık türde bir alt alan yolu olamaz. Karmaşık bir yapıda belirli düğümleri almak istiyorsanız, tek tek düğümleri bellekte düzleştirebilir ve ardından çıktıyı dizininizdeki bir dize koleksiyonuna gönderebilirsiniz.
mappingFunction isteğe bağlı. Dizin oluşturucular tarafından desteklenen eşleme işlevleri tarafından sağlanan ek işleme ekler. Zenginleştirme düğümleri için kodlama ve kod çözme en yaygın kullanılan işlevlerdir.

Çıktı alanı eşlemelerini tanımlamak için REST API veya Azure SDK'sını kullanabilirsiniz.

İpucu

Verileri içeri aktarma sihirbazı tarafından oluşturulan dizin oluşturucular, sihirbaz tarafından oluşturulan çıkış alanı eşlemelerini içerir. Örneklere ihtiyacınız varsa, işlenen tanımı görmek için sihirbazı veri kaynağınız üzerinden çalıştırın.

Herhangi bir API sürümü olan Dizin Oluşturucu Oluştur (REST) veya Güncelleştirme Dizin Oluşturucu (REST) kullanın.

Bu örnek, bir blob'un içerik özelliğinden ayıklanan varlıkları ve yaklaşım etiketlerini arama dizinindeki alanlara ekler.

PUT https://[service name].search.windows.net/indexers/myindexer?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
    "name": "myIndexer",
    "dataSourceName": "myDataSource",
    "targetIndexName": "myIndex",
    "skillsetName": "myFirstSkillSet",
    "fieldMappings": [],
    "outputFieldMappings": [
        {
            "sourceFieldName": "/document/content/organizations/*/description",
            "targetFieldName": "descriptions",
            "mappingFunction": {
                "name": "base64Decode"
            }
        },
        {
            "sourceFieldName": "/document/content/organizations",
            "targetFieldName": "orgNames"
        },
        {
            "sourceFieldName": "/document/content/sentiment",
            "targetFieldName": "sentiment"
        }
    ]
}

Her çıkış alanı eşlemesi için zenginleştirilmiş belge ağacındaki (sourceFieldName) verilerin konumunu ve dizinde (targetFieldName) başvurulan alanın adını ayarlayın. Bir alanın içeriğini dizinde depolanmadan önce dönüştürmek için gereken eşleme işlevlerini atayın.

Karmaşık yapıları dize koleksiyonuna düzleştirme

Kaynak verileriniz iç içe veya hiyerarşik JSON'lardan oluşuyorsa, veri yollarını ayarlamak için alan eşlemelerini kullanamazsınız. Bunun yerine, arama dizininizin tam içeri aktarma için her düzeyde için kaynak veri yapısını yansıtması gerekir.

Bu bölümde, karmaşık bir belgenin hem kaynak hem de hedef tarafında bire bir yansımasını oluşturan içeri aktarma işleminde size yol gösterilir. Ardından, tek tek düğümlerin dize koleksiyonlarına alınmasını ve düzleştirmesini göstermek için aynı kaynak belgeyi kullanır.

Azure Cosmos DB'de iç içe JSON içeren bir belge örneği aşağıda verilmiştir:

{
   "palette":"primary colors",
   "colors":[
      {
         "name":"blue",
         "medium":[
            "acrylic",
            "oil",
            "pastel"
         ]
      },
      {
         "name":"red",
         "medium":[
            "acrylic",
            "pastel",
            "watercolor"
         ]
      },
      {
         "name":"yellow",
         "medium":[
            "acrylic",
            "watercolor"
         ]
      }
   ]
}

Yukarıdaki kaynak belgenin tam dizinini oluşturmak istiyorsanız alan adlarının, düzeylerinin ve türlerinin karmaşık bir tür olarak yansıtıldığı bir dizin tanımı oluşturursunuz. Alan eşlemeleri arama dizinindeki karmaşık türler için desteklenmediğinden, dizin tanımınızın kaynak belgeyi yansıtması gerekir.

{
  "name": "my-test-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true},
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "colors", "type": "Collection(Edm.ComplexType)",
      "fields": [
        {
          "name": "name",
          "type": "Edm.String",
          "searchable": true,
          "retrievable": true
        },
        {
          "name": "medium",
          "type": "Collection(Edm.String)",
          "searchable": true,
          "retrievable": true,
        }
      ]
    }
  ]
}

burada içeri aktarma işlemini yürüten örnek bir dizin oluşturucu tanımı verilmiştir (alan eşlemeleri ve beceri kümesi olmadığına dikkat edin).

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-test-index",

  "fieldMappings": [],
  "outputFieldMappings": []
}

Sonuç, Azure Cosmos DB'deki özgün arama belgesine benzer şekilde aşağıdaki örnek arama belgesidir.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "colors": [
        {
          "name": "blue",
          "medium": [
            "acrylic",
            "oil",
            "pastel"
          ]
        },
        {
          "name": "red",
          "medium": [
            "acrylic",
            "pastel",
            "watercolor"
          ]
        },
        {
          "name": "yellow",
          "medium": [
            "acrylic",
            "watercolor"
          ]
        }
      ]
    }
  ]
}

Arama dizininde alternatif bir işleme, kaynağın iç içe yapısındaki tek tek düğümleri arama dizinindeki bir dize koleksiyonuna düzleştirmektir.

Bu görevi gerçekleştirmek için, bellek içi düğümü outputFieldMappings dizindeki bir dize koleksiyonuyla eşleyen bir gerekir. Çıkış alanı eşlemeleri öncelikle beceri çıkışlarına uygulansa da, dizin oluşturucunun bir kaynak belgeyi açtığı ve belleğe okuduğu "belge kırıldıktan" sonra düğümleri ele almak için de bunları kullanabilirsiniz.

Düzleştirilmiş çıkış almak için dize koleksiyonlarını kullanan örnek dizin tanımı aşağıda verilmiştir:

{
  "name": "my-new-flattened-index",
  "defaultScoringProfile": "",
  "fields": [
    { "name": "id", "type": "Edm.String", "searchable": false, "retrievable": true, "key": true },
    { "name": "palette", "type": "Edm.String", "searchable": true, "retrievable": true },
    { "name": "color_names", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true },
    { "name": "color_mediums", "type": "Collection(Edm.String)", "searchable": true, "retrievable": true}
  ]
}

İç içe JSON'ı dize koleksiyonu alanlarıyla ilişkilendirmek için kullanılan outputFieldMappings örnek dizin oluşturucu tanımı aşağıda verilmiştir. Beceri kümesi olmasa bile kaynak alanın zenginleştirme düğümleri için yol söz dizimini kullandığına dikkat edin. Belgenin kırılması sırasında sistemde zenginleştirilmiş belgeler oluşturulur. Bu, belge kırıldığında söz konusu düğümler mevcut olduğu sürece her belge ağacındaki düğümlere erişebileceğiniz anlamına gelir.

{
  "name": "my-test-indexer",
  "dataSourceName": "my-test-ds",
  "skillsetName": null,
  "targetIndexName": "my-new-flattened-index",
  "parameters": {  },
  "fieldMappings": [   ],
  "outputFieldMappings": [
    {
       "sourceFieldName": "/document/colors/*/name",
       "targetFieldName": "color_names"
    },
    {
       "sourceFieldName": "/document/colors/*/medium",
       "targetFieldName": "color_mediums"
    }
  ]
}

Yukarıdaki tanımın sonuçları aşağıdaki gibidir. Yapıyı basitleştirmek bu durumda bağlamı kaybeder. Artık belirli bir renkle içinde bulunduğu ortamlar arasında ilişki yoktur. Ancak, senaryonuza bağlı olarak, aşağıda gösterilene benzer bir sonuç tam olarak ihtiyacınız olan şey olabilir.

{
  "value": [
    {
      "@search.score": 1,
      "id": "240a98f5-90c9-406b-a8c8-f50ff86f116c",
      "palette": "primary colors",
      "color_names": [
        "blue",
        "red",
        "yellow"
      ],
      "color_mediums": [
        "[\"acrylic\",\"oil\",\"pastel\"]",
        "[\"acrylic\",\"pastel\",\"watercolor\"]",
        "[\"acrylic\",\"watercolor\"]"
      ]
    }
  ]
}

Ayrıca bkz.