Buat atau Perbarui Indeks (Pratinjau REST API)

Berlaku untuk: 2023-07-01-Preview, 2021-04-30-Preview, 2020-06-30-Preview

Penting

Pratinjau 2023-07-01 menambahkan pencarian vektor.

  • Objek "vectorSearch" , konfigurasi pengaturan pencarian vektor. Hanya berlaku untuk algoritma pencarian vektor.
  • Jenis data "Collection(Edm.Single)" , diperlukan untuk bidang vektor. Mewakili angka floating-point presisi tunggal sebagai jenis primitif.
  • Properti "dimensi", diperlukan untuk bidang vektor. Mewakili dimensi penyematan vektor Anda.
  • Properti "vectorSearchConfiguration", diperlukan untuk bidang vektor. Memilih konfigurasi algoritma untuk bidang ini.

Pratinjau 2021-04-30 menambahkan:

  • "semanticConfiguration" digunakan untuk pencakupan peringkat semantik ke bidang tertentu.
  • "identity", di bagian "encryptionKey", digunakan untuk mengambil kunci enkripsi yang dikelola pelanggan dari Azure Key Vault menggunakan identitas terkelola yang ditetapkan pengguna.

Pratinjau 06-06-2020 menambahkan:

  • "normalizer", digunakan untuk ketidakpekaan huruf besar/kecil pada pengurutan dan filter.

Indeks menentukan skema indeks, termasuk koleksi bidang (nama bidang, jenis data, dan atribut), tetapi juga konstruksi lain (pemberi saran, profil penilaian, dan konfigurasi CORS) yang menentukan perilaku pencarian lainnya.

Anda dapat menggunakan POST atau PUT pada permintaan buat. Untuk salah satu, isi permintaan menyediakan definisi objek.

POST https://[servicename].search.windows.net/indexes?api-version=[api-version]  
  Content-Type: application/json
  api-key: [admin key]  

Untuk permintaan pembaruan, gunakan PUT dan tentukan nama indeks pada URI.

PUT https://[servicename].search.windows.net/indexes/[index name]?api-version=[api-version]
  Content-Type: application/json
  api-key: [admin key]

HTTPS diperlukan untuk semua permintaan layanan. Jika indeks tidak ada, indeks akan dibuat. Jika sudah ada, itu diperbarui ke definisi baru.

Membuat indeks menetapkan skema dan metadata. Mengisi indeks adalah operasi terpisah. Untuk langkah ini, Anda dapat menggunakan pengindeks (lihat Operasi pengindeks, tersedia untuk sumber data yang didukung) atau Menambahkan, Memperbarui, atau Menghapus Dokumen. Jumlah maksimum indeks yang dapat Anda buat bervariasi menurut tingkat harga. Dalam setiap indeks, ada batasan pada elemen individual. Untuk informasi selengkapnya, lihat Batas layanan untuk Azure AI Search.

Memperbarui indeks yang ada harus menyertakan definisi skema lengkap, termasuk definisi asli yang ingin Anda pertahankan. Secara umum, pola terbaik untuk pembaruan adalah mengambil definisi indeks dengan GET, memodifikasinya, lalu memperbaruinya dengan PUT.

Karena indeks yang ada berisi konten, banyak modifikasi indeks memerlukan penurunan dan pembangunan ulang indeks. Perubahan skema berikut adalah pengecualian untuk aturan ini:

  • Menambahkan bidang baru

  • Menambahkan atau mengubah profil penilaian

  • Menambahkan atau mengubah konfigurasi semantik

  • Mengubah opsi CORS

  • Mengubah bidang yang sudah ada dengan salah satu dari tiga modifikasi berikut:

    • Tampilkan atau sembunyikan bidang (retrievable: true | false)
    • Mengubah penganalisis yang digunakan pada waktu kueri (searchAnalyzer)
    • Menambahkan atau mengedit synonymMap yang digunakan pada waktu kueri (synonymMaps)

Untuk membuat salah satu perubahan skema di atas pada indeks yang ada, tentukan nama indeks pada URI permintaan, lalu sertakan definisi indeks yang sepenuhnya ditentukan dengan elemen baru atau yang diubah.

Saat bidang baru ditambahkan, semua dokumen yang ada dalam indeks secara otomatis memiliki nilai null untuk bidang tersebut. Tidak ada ruang penyimpanan tambahan yang digunakan sampai salah satu dari dua hal terjadi: nilai disediakan untuk bidang baru (menggunakan penggabungan), atau dokumen baru ditambahkan.

Updates memiliki batasan serupasuggester: bidang baru dapat ditambahkan ke suggester bidang pada saat yang sama ditambahkan, tetapi bidang yang ada tidak dapat dihapus dari atau ditambahkan ke suggesters tanpa pembangunan ulang indeks.

Updates ke penganalisis, tokenizer, filter token, atau filter karakter tidak diizinkan. Yang baru dapat dibuat dengan perubahan yang Anda inginkan, tetapi Anda harus membuat indeks offline saat menambahkan definisi penganalisis baru. allowIndexDowntime Mengatur bendera ke true dalam permintaan pembaruan indeks membuat indeks offline:

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=[api-version]&allowIndexDowntime=true

Operasi ini membuat indeks Anda offline setidaknya selama beberapa detik, yang berarti permintaan pengindeksan dan kueri gagal sampai indeks kembali online dan siap menangani permintaan.

Parameter URI

Parameter Deskripsi
nama layanan Wajib diisi. Atur nilai ini ke nama unik yang ditentukan pengguna dari layanan pencarian Anda.
nama indeks Diperlukan pada URI jika menggunakan PUT. Nama harus huruf kecil, dimulai dengan huruf atau angka, tidak memiliki garis miring atau titik, dan kurang dari 128 karakter. Tanda hubung tidak bisa berturut-turut.
versi-api Wajib diisi. Versi pratinjau saat ini adalah 2023-07-23-preview. Lihat versi API untuk versi lainnya.
allowIndexDowntime Pilihan. Salah secara default. Atur ke true untuk pembaruan tertentu, seperti menambahkan atau memodifikasi penganalisis, tokenizer, filter token, filter karakter, atau properti kesamaan. Indeks diambil offline selama pembaruan, biasanya tidak lebih dari beberapa detik.

Judul Permintaan

Tabel berikut ini menjelaskan header permintaan yang diperlukan dan opsional.

Bidang Deskripsi
Jenis-Konten Wajib diisi. Atur nilai ini ke application/json
api-key Opsional jika Anda menggunakan peran Azure dan token pembawa disediakan berdasarkan permintaan, jika tidak, kunci diperlukan. Kunci api adalah string unik yang dihasilkan sistem yang mengautentikasi permintaan ke layanan pencarian Anda. Membuat permintaan harus menyertakan header yang api-key diatur ke kunci admin Anda (dibandingkan dengan kunci kueri). Lihat Menyambungkan ke Pencarian Azure AI menggunakan autentikasi kunci untuk detailnya.

Isi Permintaan

Isi permintaan berisi definisi skema, yang mencakup daftar bidang data dalam dokumen yang diumpankan ke dalam indeks ini.

JSON berikut adalah representasi tingkat tinggi dari skema yang mendukung pencarian vektor. Skema memerlukan bidang kunci, dan bidang kunci tersebut dapat dicari, dapat difilter, dapat diurutkan, dan dapat difaset.

Bidang pencarian vektor berjenis Collection(Edm.Single). Karena bidang vektor tidak tekstual, bidang vektor tidak dapat digunakan sebagai kunci, dan tidak menerima penganalisis, normalizer, pemberi saran, atau sinonim. Ini harus memiliki properti "dimensi" dan properti "vectorSearchConfiguration".

Skema yang mendukung pencarian vektor juga dapat mendukung pencarian kata kunci. Bidang nonvektor lainnya dalam indeks dapat menggunakan penganalisis, sinonim, dan profil penilaian apa pun yang Anda sertakan dalam indeks Anda.

{  
  "name": (optional on PUT; required on POST) "Name of the index",
  "description": (optional) "Description of the index",  
  "fields": [  
    {  
      "name": "name_of_field",  
      "type": "Edm.String | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint | Edm.ComplexType | Collection(Edm.String) | Collection(Edm.Int32) | Collection(Edm.Int64) | Collection(Edm.Single) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),  
      "filterable": true (default) | false,  
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),  
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),  
      "retrievable": true (default) | false,  
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "normalizer": "name_of_normalizer", (optional, applies only to filterable, facetable, or sortable Edm.String and Collection(Edm.String) fields.)
      "synonymMaps": [ "name_of_synonym_map" ], (optional, only one synonym map per field is currently supported),
      "fields" : [ ... ], (optional, a list of sub-fields if this is a field of type Edm.ComplexType or Collection(Edm.ComplexType). Must be null or empty for simple fields.)
      "dimensions": 1234, (required for vector field definitions. Prohibited for non-vector fields. Integer specifying the dimensionality of the embeddings generated by a machine learning model)
      "vectorSearchConfiguration": "name_of_algorithm_config" (required for vector field definitions. Prohibited for non-vector fields. This should reference an algorithm configuration.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (optional) [ ... ],  
  "semantic": (optional) { },
  "vectorSearch": (optional) {
    "algorithmConfigurations": [
        {
            "name": "name_of_algorithm_config",
            "kind": "hnsw" (algorithm type. Only "hnsw" is supported currently.),
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]},
  "normalizers":(optional) [ ... ],
  "analyzers":(optional) [ ... ],
  "charFilters":(optional) [ ... ],
  "tokenizers":(optional) [ ... ],
  "tokenFilters":(optional) [ ... ],
  "defaultScoringProfile": (optional) "Name of a custom scoring profile to use as the default",  
  "corsOptions": (optional) { },
  "encryptionKey":(optional) { }  
}  

Permintaan berisi properti berikut:

Properti Deskripsi
nama Wajib diisi. Nama indeks. Nama indeks hanya boleh berisi huruf kecil, digit, atau tanda hubung, tidak dapat dimulai atau diakhir dengan tanda hubung dan dibatasi hingga 128 karakter.
deskripsi Deskripsi opsional.
Bidang Kumpulan bidang untuk indeks ini, di mana setiap bidang memiliki nama, jenis data yang didukung yang sesuai dengan Model Data Entitas (EDM), dan atribut yang menentukan tindakan yang diizinkan pada bidang tersebut. Kumpulan bidang harus memiliki satu bidang jenis Edm.String dengan "kunci" diatur ke "true". Bidang ini mewakili pengidentifikasi unik, kadang-kadang disebut ID dokumen, untuk setiap dokumen yang disimpan dengan indeks. Kumpulan bidang sekarang menerima bidang vektor.
Kesamaan Pilihan. Untuk layanan yang dibuat sebelum 15 Juli 2020, atur properti ini untuk memilih algoritma peringkat BM25.
pemberi saran Menentukan konstruksi yang menyimpan awalan untuk pencocokan pada kueri parsial seperti lengkapi otomatis dan saran.
scoringProfiles Pilihan. Digunakan untuk penyetelan relevansi untuk kueri teks lengkap.
Semantik Pilihan. Menentukan parameter indeks pencarian yang memengaruhi kemampuan pencarian semantik. Konfigurasi semantik diperlukan untuk kueri semantik. Untuk informasi selengkapnya, lihat Membuat kueri semantik.
vectorSearch Pilihan. Mengonfigurasi berbagai pengaturan pencarian vektor. Hanya algoritma pencarian vektor yang dapat dikonfigurasi.
normalizer Pilihan. Menormalkan urutan leksikografis string, menghasilkan output pengurutan dan pemfilteran yang tidak peka huruf besar/kecil.
penganalisis, charFilters, tokenizer, tokenFilters Pilihan. Tentukan bagian indeks ini jika Anda menentukan penganalisis kustom. Secara default, bagian ini null.
defaultScoringProfile Nama profil penilaian kustom yang menimpa perilaku penilaian default.
corsOptions Pilihan. Digunakan untuk kueri lintas asal ke indeks Anda.
encryptionKey Pilihan. Digunakan untuk enkripsi ekstra indeks, melalui kunci enkripsi (CMK) yang dikelola pelanggan di Azure Key Vault. Tersedia untuk layanan pencarian yang dapat ditagih yang dibuat pada atau setelah 2019-01-01.

Respons

Untuk permintaan pembuatan yang berhasil, Anda akan melihat kode status "201 Dibuat". Secara default, isi respons berisi JSON untuk definisi indeks yang dibuat. Namun, jika header Permintaan pilihan diatur ke return=minimal, isi respons kosong, dan kode status keberhasilan adalah "204 Tidak Ada Konten" alih-alih "201 Dibuat". Ini benar terlepas dari apakah PUT atau POST digunakan untuk membuat indeks.

Untuk permintaan pembaruan yang berhasil, Anda akan melihat "204 Tanpa Konten". Secara default isi respons kosong. Namun, jika Prefer header permintaan diatur ke return=representation, isi respons berisi JSON untuk definisi indeks yang diperbarui. Dalam hal ini, kode status keberhasilan adalah "200 OK".

Contoh

Contoh: Vektor

Pencarian vektor diimplementasikan di tingkat bidang. Definisi ini menempatkan fokus pada bidang vektor. Bidang vektor harus berjenis Collection(Edm.Single) yang digunakan untuk menyimpan nilai titik mengambang presisi tunggal. Bidang vektor memiliki properti "dimensi" yang menyimpan jumlah dimensi output yang didukung oleh model pembelajaran mesin yang digunakan untuk menghasilkan penyematan. Misalnya, jika Anda menggunakan text-embedding-ada-002, jumlah maksimum dimensi output adalah 1536 per dokumen ini. "algorithmConfiguration" diatur ke nama konfigurasi "vectorSearch" dalam indeks Anda. Anda dapat menentukan beberapa dalam indeks, lalu menentukan satu per bidang.

Banyak atribut hanya berlaku untuk bidang nonvector. Atribut seperti "filterable", "sortable", "facetable", "analyzer", "normalizer", dan "synonymMaps" diabaikan untuk bidang vektor. Demikian juga, jika Anda mengatur properti khusus vektor seperti "dimensi" atau "vectorSearchConfiguration" pada bidang yang berisi konten alfanumerik, atribut tersebut diabaikan.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "retrievable": true,
            "filterable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    }
}

Contoh: Koleksi bidang dengan bidang vektor dan non-vektor

Pencarian vektor diimplementasikan di tingkat bidang. Untuk mendukung skenario kueri hibrid, buat pasangan bidang untuk kueri vektor dan nonvektor. Bidang "title", "titleVector", "content", "contentVector" mengikuti konvensi ini. Jika Anda juga ingin menggunakan pencarian semantik, Anda harus memiliki bidang teks nonvektor untuk perilaku tersebut.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "filterable": true
        },
        {
            "name": "title",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "category",
            "type": "Edm.String",
            "filterable": true,
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "corsOptions": {
        "allowedOrigins": [
            "*"
        ],
        "maxAgeInSeconds": 60
    },
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    },
    "semantic": {
        "configurations": [
            {
                "name": "my-semantic-config",
                "prioritizedFields": {
                    "titleField": {
                        "fieldName": "title"
                    },
                    "prioritizedContentFields": [
                        {
                            "fieldName": "content"
                        }
                    ],
                    "prioritizedKeywordsFields": [
                        {
                            "fieldName": "category"
                        }
                    ]
                }
            }
        ]
    }
}

Contoh: Skema indeks dengan bidang sederhana dan kompleks

Contoh pertama menunjukkan skema indeks lengkap dengan bidang sederhana dan kompleks. Setidaknya satu bidang string harus memiliki "kunci" yang diatur ke true.

{
  "name": "hotels",  
  "fields": [
    { "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
    { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
    { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
    { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
    { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
    { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
    { "name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true },
    { "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Address", "type": "Edm.ComplexType", 
      "fields": [
          { "name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
          { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true, "normalizer": "lowercase" },
          { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true }
        ]
    },
    { "name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true },
    { "name": "Rooms", "type": "Collection(Edm.ComplexType)", 
      "fields": [
          { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene" },
          { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene" },
          { "name": "Type", "type": "Edm.String", "searchable": true },
          { "name": "BaseRate", "type": "Edm.Double", "filterable": true, "facetable": true },
          { "name": "BedOptions", "type": "Edm.String", "searchable": true },
          { "name": "SleepsCount", "type": "Edm.Int32", "filterable": true, "facetable": true },
          { "name": "SmokingAllowed", "type": "Edm.Boolean", "filterable": true, "facetable": true },
          { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" }
        ]
    }
  ],
  "suggesters": [ ],
  "analyzers": [ ],
  "normalizers": [ ],
  "encryptionKey": [ ]
}  

Contoh: Pemberi Saran

Definisi pemberi saran harus menentukan bidang string "dapat dicari" dan "dapat diambil" (di REST API, semua bidang sederhana secara "retrievable": true default). Setelah pemberi saran ditentukan, Anda dapat mereferensikannya berdasarkan nama pada permintaan kueri yang menggunakan API Saran atau API Lengkapi Otomatis, tergantung pada apakah Anda ingin mengembalikan kecocokan atau sisa istilah kueri.

{
  "name": "hotels",  
  "fields": [
    { "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
    { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
    { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
    { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
    { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
    { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "suggesters": [
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": ["HotelName", "Category", "Tags"]  
    } 
  ]
} 

Contoh: Penganalisis dan normalizer

Penganalisis dan normalizer direferensikan pada definisi bidang dan dapat ditentukan sebelumnya atau kustom. Jika Anda menggunakan penganalisis atau normalizer kustom, tentukan dalam indeks di bagian "penganalisis" dan "normalizer".

Contoh berikut mengilustrasikan penganalisis dan normalizer kustom untuk "Tag". Ini juga menunjukkan normalizer yang telah ditentukan sebelumnya (standar) dan penganalisis (en.microsoft) untuk "HotelName" dan "Description", masing-masing.

{
  "name": "hotels",  
  "fields": [
    { "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
    { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false, "normalizer": standard  },
    { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft"},
    { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
    { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
    { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ],
  "normalizers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomNormalizer",
      "name": "tagsNormalizer",
      "tokenFilters": [ "asciifolding", "lowercase" ]
    }
  ]
}  

Contoh: Kesamaan untuk relevansi pencarian

Properti ini mengatur algoritma peringkat yang digunakan untuk membuat skor relevansi dalam hasil pencarian kueri pencarian teks lengkap. Dalam layanan yang dibuat setelah 15 Juli 2020, properti ini diabaikan karena algoritma kesamaan selalu BM25. Untuk layanan yang sudah ada yang dibuat sebelum 15 Juli 2020, Anda dapat memilih BM25 dengan mengatur konstruksi ini sebagai berikut:

 "similarity": {
     "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
 }

Contoh: Opsi CORS

JavaScript sisi klien tidak dapat memanggil API apa pun secara default karena browser mencegah semua permintaan lintas asal. Untuk mengizinkan kueri lintas asal ke indeks Anda, aktifkan CORS (Berbagi sumber daya lintas asal (Wikipedia)) dengan mengatur corsOptions atribut . Untuk alasan keamanan, hanya API kueri yang mendukung CORS.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "corsOptions": (optional) {  
       "allowedOrigins": ["*"] | ["https://docs.microsoft.com:80", "https://azure.microsoft.com:80", ...],  
       "maxAgeInSeconds": (optional) max_age_in_seconds (non-negative integer)  
     }
}

Contoh: Kunci enkripsi dengan kredensial akses

Kunci enkripsi adalah kunci yang dikelola pelanggan yang digunakan untuk enkripsi tambahan. Untuk informasi selengkapnya, lihat Enkripsi menggunakan kunci yang dikelola pelanggan di Azure Key Vault.

{
    "name": "hotels",  
    "fields": [ omitted for brevity ],
    "suggesters": [ omitted for brevity ],
    "analyzers": [ omitted for brevity ],
    "encryptionKey": (optional) { 
       "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
       "keyVaultKeyVersion": "Version of the Azure Key Vault key",
       "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
       "accessCredentials": (optional, only if not using managed system identity) {
          "applicationId": "AAD Application ID that was granted access permissions to your specified Azure Key Vault",
          "applicationSecret": "Authentication key of the specified AAD application)"
        }
    }
} 

Contoh: Kunci enkripsi dengan identitas terkelola

Anda dapat mengautentikasi ke Azure Key Vault menggunakan identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna (pratinjau). Dalam hal ini, hilangkan kredensial akses, atau atur ke null. Contoh berikut menunjukkan identitas terkelola yang ditetapkan pengguna. Untuk menggunakan identitas terkelola yang ditetapkan sistem, hilangkan kredensial dan identitas akses. Selama identitas sistem layanan pencarian Anda memiliki izin di Azure Key Vault, permintaan koneksi akan berhasil.

{
  "name": "hotels",  
  "fields": [ omitted for brevity ],
  "suggesters": [ omitted for brevity ],
  "analyzers": [ omitted for brevity ],
  "encryptionKey": (optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
      "accessCredentials": null,
          "identity" : { 
              "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
              "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
          }
    }
} 

Contoh: Profil Penilaian

Profil penilaian adalah bagian dari skema yang menentukan perilaku penilaian kustom yang memungkinkan Anda memengaruhi dokumen mana yang tampak lebih tinggi dalam hasil pencarian. Profil penilaian terdiri dari bobot dan fungsi lapangan. Untuk menggunakannya, Anda menentukan profil menurut nama pada string kueri. Untuk informasi selengkapnya, lihat Menambahkan profil penilaian ke indeks pencarian (Azure AI Search REST API) untuk detailnya.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "scoringProfiles": [  
   {  
     "name": "name of scoring profile",  
     "text": (optional, only applies to searchable fields) {  
       "weights": {  
         "searchable_field_name": relative_weight_value (positive #'s),  
         ...  
       }  
     },  
     "functions": (optional) [  
       {  
         "type": "magnitude | freshness | distance | tag",  
         "boost": # (positive number used as multiplier for raw score != 1),  
         "fieldName": "...",  
         "interpolation": "constant | linear (default) | quadratic | logarithmic",  
         "magnitude": {  
           "boostingRangeStart": #,  
           "boostingRangeEnd": #,  
           "constantBoostBeyondRange": true | false (default)  
         },  
         "freshness": {  
           "boostingDuration": "..." (value representing timespan leading to now over which boosting occurs)  
         },  
         "distance": {  
           "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)  
           "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)  
         },  
         "tag": {  
           "tagsParameter": "..." (parameter to be passed in queries to specify a list of tags to compare against target fields)  
         }  
       }  
     ],  
     "functionAggregation": (optional, applies only when functions are specified)   
       "sum (default) | average | minimum | maximum | firstMatching"  
       }  
 ]
}

Contoh: Konfigurasi Semantik

Konfigurasi semantik adalah bagian dari definisi indeks yang digunakan untuk mengonfigurasi bidang mana yang digunakan oleh pencarian semantik untuk peringkat, keterangan, sorotan, dan jawaban. Untuk menggunakan pencarian semantik, Anda harus menentukan nama konfigurasi semantik pada waktu kueri. Untuk informasi selengkapnya, lihat Membuat kueri semantik.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "my-semantic-config",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "hotelName"
               },
           "prioritizedContentFields": [
             {
               "fieldName": "description"
             },
             {
               "fieldName": "description_fr"
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "tags"
             },
             {
               "fieldName": "category"
             }
           ]
         }
       }
     ]
   }
}

Definisi

Tautan Deskripsi
corsOptions Mencantumkan domain atau asal yang diberikan ke indeks Anda.
defaultScoringProfile Nama profil penilaian kustom yang menimpa perilaku penilaian default.
encryptionKey Mengonfigurasi koneksi ke Azure Key Vault untuk enkripsi yang dikelola pelanggan.
Bidang Mengatur definisi dan atribut bidang dalam indeks pencarian.
normalizer Mengonfigurasi normalizer kustom. Menormalkan urutan leksikografis string, menghasilkan output pengurutan, faset, dan pemfilteran yang tidak peka huruf besar/kecil.
Semantik Mengonfigurasi bidang yang digunakan oleh pencarian semantik untuk peringkat, keterangan, sorotan, dan jawaban.
scoringProfiles Digunakan untuk penyetelan relevansi untuk kueri teks lengkap.
Kesamaan
pemberi saran Mengonfigurasi penyimpanan awalan internal untuk pencocokan pada kueri parsial seperti lengkapi otomatis dan saran.
vectorSearch Mengonfigurasi algoritma yang digunakan untuk bidang vektor.

corsOptions

JavaScript sisi klien tidak dapat memanggil API apa pun secara default karena browser mencegah semua permintaan lintas asal. Untuk mengizinkan kueri lintas asal ke indeks Anda, aktifkan CORS (Berbagi Sumber Daya Lintas Asal) dengan mengatur atribut "corsOptions". Untuk alasan keamanan, hanya API kueri yang mendukung CORS.

Atribut Deskripsi
allowedOrigins Wajib diisi. Daftar asal yang dibatasi koma yang diberikan akses ke indeks Anda, di mana setiap asal biasanya dari formulir protocol://<-qualified-domain-name>:<port> (meskipun <port> sering dihilangkan). Ini berarti bahwa setiap kode JavaScript yang disajikan dari asal tersebut diizinkan untuk mengkueri indeks Anda (dengan asumsi kode tersebut menyediakan kunci API yang valid). Jika Anda ingin mengizinkan akses ke semua asal, tentukan * sebagai satu item dalam array "allowedOrigins". Ini tidak disarankan untuk produksi, tetapi mungkin berguna untuk pengembangan atau penelusuran kesalahan.
maxAgeInSeconds Pilihan. Browser menggunakan nilai ini untuk menentukan durasi (dalam detik) untuk menyimpan respons preflight CORS. Nilai harus bilangan bulat non-negatif. Performa meningkat jika nilai ini lebih besar, tetapi keuntungan tersebut diimbangi dengan jumlah waktu yang diperlukan agar perubahan kebijakan CORS berlaku. Jika tidak diatur, durasi default 5 menit akan digunakan.

defaultScoringProfile

Pilihan. String yang merupakan nama profil penilaian kustom yang ditentukan dalam indeks. Profil default dipanggil setiap kali profil kustom tidak ditentukan secara eksplisit pada string kueri. Untuk informasi selengkapnya, lihat Menambahkan profil penilaian ke indeks pencarian.

encryptionKey

Mengonfigurasi koneksi ke Azure Key Vault untuk kunci enkripsi (CMK) yang dikelola pelanggan tambahan. Tersedia untuk layanan pencarian yang dapat ditagih yang dibuat pada atau setelah 1 Januari 2019.

Koneksi ke brankas kunci harus diautentikasi. Anda dapat menggunakan "accessCredentials" atau identitas terkelola untuk tujuan ini.

Identitas terkelola dapat berupa sistem atau ditetapkan pengguna (pratinjau). Jika layanan pencarian memiliki identitas terkelola yang ditetapkan sistem dan penetapan peran yang memberikan akses baca ke brankas kunci, Anda dapat menghilangkan "identitas" dan "accessCredentials", dan permintaan akan mengautentikasi menggunakan identitas terkelola. Jika layanan pencarian memiliki identitas dan penetapan peran yang ditetapkan pengguna, atur properti "identitas" ke ID sumber daya identitas tersebut.

Atribut Deskripsi
keyVaultKeyName Wajib diisi. Nama kunci Azure Key Vault yang digunakan untuk enkripsi.
keyVaultKeyVersion Wajib diisi. Versi kunci Key Vault Azure.
keyVaultUri Wajib diisi. URI Azure Key Vault (juga disebut sebagai nama DNS) yang menyediakan kunci. Contoh URI mungkin https://my-keyvault-name.vault.azure.net
accessCredentials Opsional. Hilangkan properti ini jika Anda menggunakan identitas terkelola. Jika tidak, properti "accessCredentials" meliputi:
"applicationId" (ID Aplikasi Azure Active Directory yang memiliki izin akses ke Azure Key Vault yang Ditentukan).
"applicationSecret" (kunci autentikasi aplikasi Azure AD yang ditentukan).
identity Opsional kecuali Anda menggunakan identitas terkelola yang ditetapkan pengguna untuk koneksi layanan pencarian ke Azure Key Vault. Formatnya adalah "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]".

fields

Berisi informasi tentang atribut pada definisi bidang.

Atribut Deskripsi
nama Wajib diisi. Mengatur nama bidang, yang harus unik dalam kumpulan bidang indeks atau bidang induk.
jenis Wajib diisi. Mengatur jenis data untuk bidang . Bidang bisa sederhana atau kompleks. Bidang sederhana adalah jenis primitif, seperti Edm.String untuk teks atau Edm.Int32 untuk bilangan bulat. Bidang kompleks dapat memiliki subbidang yang sederhana atau kompleks. Ini memungkinkan Anda untuk memodelkan objek dan array objek, yang pada gilirannya memungkinkan Anda mengunggah sebagian besar struktur objek JSON ke indeks Anda. Collection(Edm.Single) mengakomodasi nilai floating point presisi tunggal. Ini hanya digunakan untuk bidang vektor, dan diperlukan. Lihat Jenis data yang didukung untuk daftar lengkap jenis yang didukung.
kunci Wajib diisi. Atur atribut ini ke true untuk menunjuk bahwa nilai bidang secara unik mengidentifikasi dokumen dalam indeks. Panjang maksimum nilai dalam bidang kunci adalah 1024 karakter. Tepat satu bidang tingkat atas di setiap indeks harus dipilih sebagai bidang kunci dan harus berjenis Edm.String. Defaultnya adalah false untuk bidang sederhana dan null untuk bidang kompleks.

Bidang kunci dapat digunakan untuk mencari dokumen secara langsung dan memperbarui atau menghapus dokumen tertentu. Nilai bidang kunci ditangani dengan cara yang peka huruf besar/kecil saat mencari atau mengindeks dokumen. Lihat Dokumen Pencarian dan Tambahkan, Perbarui, atau Hapus Dokumen untuk detailnya.
dapat diambil Menunjukkan apakah bidang dapat dikembalikan dalam hasil pencarian. Atur atribut ini ke false jika Anda ingin menggunakan bidang (misalnya, margin) sebagai filter, pengurutan, atau mekanisme penilaian tetapi tidak ingin bidang terlihat oleh pengguna akhir. Atribut ini harus true untuk bidang kunci, dan harus null untuk bidang kompleks. Atribut ini dapat diubah pada bidang yang ada. Pengaturan yang dapat diambil true tidak menyebabkan peningkatan persyaratan penyimpanan indeks. Defaultnya adalah true untuk bidang sederhana dan null untuk bidang kompleks.
dapat dicari Menunjukkan apakah bidang dapat dicari teks lengkap dan dapat direferensikan dalam kueri pencarian. Ini berarti ia menjalani analisis leksikal seperti pemecahan kata selama pengindeksan. Jika Anda mengatur bidang yang dapat dicari ke nilai seperti "Hari cerah", secara internal bidang tersebut dinormalisasi ke dalam token individu "cerah" dan "hari". Ini memungkinkan pencarian teks lengkap untuk istilah-istilah ini. Bidang jenis Edm.String atau Collection(Edm.String) dapat dicari secara default. Atribut ini harus false untuk bidang sederhana dari jenis data nonstring lainnya, dan harus null untuk bidang kompleks.

Bidang yang dapat dicari menggunakan ruang ekstra dalam indeks Anda karena Azure AI Search memproses konten bidang tersebut dan mengaturnya dalam struktur data tambahan untuk pencarian berkinerja. Jika Anda ingin menghemat ruang dalam indeks Dan Anda tidak memerlukan bidang untuk disertakan dalam pencarian, atur dapat dicari ke false. Lihat Cara kerja pencarian teks lengkap di Pencarian Azure AI untuk detailnya.
dapat difilter Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam $filter kueri. Dapat difilter berbeda dari yang dapat dicari dalam bagaimana string ditangani. Bidang jenis Edm.String atau Collection(Edm.String) yang dapat difilter tidak mengalami analisis leksikal, sehingga perbandingan hanya untuk kecocokan yang tepat. Misalnya, jika Anda mengatur bidang f seperti itu ke "Hari cerah", $filter=f eq 'sunny' tidak menemukan kecocokan, tetapi $filter=f eq 'Sunny day' akan. Atribut ini harus null untuk bidang kompleks. Defaultnya adalah true untuk bidang sederhana dan null untuk bidang kompleks. Untuk mengurangi ukuran indeks, atur atribut ini ke false pada bidang yang tidak akan Anda filter.
bisa diurutkan Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam $orderby ekspresi. Secara default Azure AI Search mengurutkan hasil menurut skor, tetapi dalam banyak pengalaman pengguna ingin mengurutkan menurut bidang dalam dokumen. Bidang sederhana hanya dapat diurutkan jika bernilai tunggal (memiliki nilai tunggal dalam cakupan dokumen induk).

Bidang koleksi sederhana tidak dapat diurutkan, karena multinilai. Subbidang sederhana dari koleksi kompleks juga multinilai, dan oleh karena itu tidak dapat diurutkan. Ini benar apakah itu bidang induk langsung, atau bidang leluhur, itulah koleksi yang kompleks. Bidang kompleks tidak dapat diurutkan dan atribut yang dapat diurutkan harus null untuk bidang tersebut. Default untuk dapat diurutkan adalah true untuk bidang sederhana bernilai tunggal, false untuk bidang sederhana multinilai, dan null untuk bidang kompleks.
facetable Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam kueri faset. Biasanya digunakan dalam presentasi hasil pencarian yang mencakup hitungan menurut kategori (misalnya, mencari kamera digital dan melihat hit berdasarkan merek, berdasarkan megapiksel, berdasarkan harga, dan sebagainya). Atribut ini harus null untuk bidang kompleks. Bidang jenis Edm.GeographyPoint atau Collection(Edm.GeographyPoint) tidak dapat difaset. Defaultnya adalah true untuk semua bidang sederhana lainnya. Untuk mengurangi ukuran indeks, atur atribut ini ke false pada bidang yang tidak akan Anda fasetkan.
Analyzer Mengatur penganalisis leksikal untuk tokenisasi string selama operasi pengindeksan dan kueri. Nilai yang valid untuk properti ini termasuk penganalisis bahasa, penganalisis bawaan, dan penganalisis kustom. Default adalah standard.lucene. Atribut ini hanya dapat digunakan dengan bidang yang dapat dicari, dan tidak dapat diatur bersama dengan searchAnalyzer atau indexAnalyzer. Setelah penganalisis dipilih dan bidang dibuat dalam indeks, penganalisis tidak dapat diubah untuk bidang . Harus null untuk bidang kompleks.
searchAnalyzer Atur properti ini bersama dengan indexAnalyzer untuk menentukan penganalisis leksikal yang berbeda untuk pengindeksan dan kueri. Jika Anda menggunakan properti ini, atur penganalisis ke null dan pastikan indexAnalyzer diatur ke nilai yang diizinkan. Nilai yang valid untuk properti ini termasuk penganalisis bawaan dan penganalisis kustom. Atribut ini hanya dapat digunakan dengan bidang yang dapat dicari. Penganalisis pencarian dapat diperbarui pada bidang yang ada karena hanya digunakan pada waktu kueri. Harus null untuk bidang kompleks.
indexAnalyzer Atur properti ini bersama dengan searchAnalyzer untuk menentukan penganalisis leksikal yang berbeda untuk pengindeksan dan kueri. Jika Anda menggunakan properti ini, atur penganalisis ke null dan pastikan searchAnalyzer diatur ke nilai yang diizinkan. Nilai yang valid untuk properti ini termasuk penganalisis bawaan dan penganalisis kustom. Atribut ini hanya dapat digunakan dengan bidang yang dapat dicari. Setelah penganalisis indeks dipilih, penganalisis tidak dapat diubah untuk bidang . Harus null untuk bidang kompleks.
Normalizer Mengatur normalizer untuk pemfilteran, pengurutan, dan operasi faset. Ini bisa menjadi nama normalizer yang telah ditentukan sebelumnya atau normalizer kustom yang ditentukan dalam indeks. Defaultnya adalah null, yang menghasilkan kecocokan persis pada teks verbatim dan tidak dianalisis. Atribut ini hanya dapat digunakan dengan Edm.String bidang dan Collection(Edm.String) yang memiliki setidaknya salah satu yang dapat difilter, dapat diurutkan, atau dapat difaset ke true. Normalizer hanya dapat diatur pada bidang saat ditambahkan ke indeks dan tidak dapat diubah nanti. Harus null untuk bidang kompleks. Nilai yang valid untuk normalizer yang telah ditentukan meliputi:

standard- Huruf kecil teks diikuti dengan asciifolding.
lowercase- Mengubah karakter menjadi huruf kecil.
uppercase - Mengubah karakter menjadi huruf besar.
asciifolding - Mengubah karakter yang tidak ada di blok Unicode Latin Dasar ke setara ASCII mereka, jika ada. Misalnya, mengubah "à" menjadi "a".
elision- Menghapus elisi dari awal token.
synonymMaps Daftar nama peta sinonim untuk dikaitkan dengan bidang ini. Atribut ini hanya dapat digunakan dengan bidang yang dapat dicari. Saat ini hanya satu peta sinonim per bidang yang didukung. Menetapkan peta sinonim ke bidang memastikan bahwa istilah kueri yang menargetkan bidang tersebut diperluas pada waktu kueri menggunakan aturan di peta sinonim. Atribut ini dapat diubah pada bidang yang ada. Harus berupa null atau koleksi kosong untuk bidang kompleks.
fields Daftar subbidang jika ini adalah bidang jenis Edm.ComplexType atau Collection(Edm.ComplexType). Harus null atau kosong untuk bidang sederhana. Lihat Cara memodelkan jenis data kompleks di Azure AI Search untuk informasi selengkapnya tentang cara dan waktu penggunaan subbidang.
dimensions Bilangan bulat. Diperlukan untuk bidang vektor. **Ini harus cocok dengan ukuran penyematan output model penyematan Anda. Misalnya, untuk model text-embedding-ada-002Azure OpenAI populer , dimensi outputnya adalah 1536, jadi ini akan menjadi dimensi yang akan diatur untuk bidang vektor tersebut. Atribut dimensi memiliki minimal 2 dan maksimum masing-masing nilai titik float 2048.
vectorSearchConfiguration Diperlukan untuk definisi bidang vektor. Menentukan nama konfigurasi algoritma "vectorSearch" yang digunakan oleh bidang vektor. Setelah bidang dibuat, Anda tidak dapat mengubah nama vectorSearchConfiguration, tetapi Anda dapat mengubah properti konfigurasi algoritma dalam indeks. Ini memungkinkan penyesuaian pada jenis algoritma dan parameter.

Catatan

Bidang jenis Edm.String yang dapat difilter, dapat diurutkan, atau dapat difaset dapat memiliki panjang paling banyak 32 kilobyte. Ini karena nilai bidang tersebut diperlakukan sebagai istilah pencarian tunggal, dan panjang maksimum istilah dalam Pencarian Azure AI adalah 32 kilobyte. Jika Anda perlu menyimpan lebih banyak teks daripada ini dalam satu bidang string, Anda harus secara eksplisit mengatur dapat difilter, dapat diurutkan, dan dapat difaset ke false dalam definisi indeks Anda.

Mengatur bidang sebagai dapat dicari, dapat difilter, diurutkan, atau dapat difaset berdampak pada ukuran indeks dan performa kueri. Jangan atur atribut tersebut pada bidang yang tidak dimaksudkan untuk direferensikan dalam ekspresi kueri.

Jika bidang tidak diatur agar dapat dicari, dapat difilter, dapat diurutkan, atau dapat difaset, bidang tidak dapat direferensikan dalam ekspresi kueri apa pun. Ini berguna untuk bidang yang tidak digunakan dalam kueri, tetapi diperlukan dalam hasil pencarian.

normalizer

Menentukan normalizer kustom yang memiliki kombinasi filter karakter dan filter token yang ditentukan pengguna. Setelah menentukan normalizer kustom dalam indeks, Anda dapat menentukannya berdasarkan nama pada definisi bidang.

Atribut Deskripsi
nama Wajib diisi. Bidang string yang menentukan normalizer kustom yang ditentukan pengguna.
charFilters Digunakan dalam normalizer kustom. Ini bisa menjadi satu atau beberapa filter karakter yang tersedia yang didukung untuk digunakan dalam normalizer kustom:
pemetaan
pattern_replace
tokenFilters Digunakan dalam normalizer kustom. Ini bisa menjadi satu atau beberapa tilter token yang tersedia yang didukung untuk digunakan dalam normalizer kustom:
arabic_normalization
elisi
cjk_width
asciifolding
german_normalization hindi_normalization
indic_normalization
persian_normalization
scandinavian_normalization

scandinavian_folding
sorani_normalization

huruf kecilhuruf besar

scoringProfiles

Profil penilaian berlaku untuk pencarian teks lengkap. Profil didefinisikan dalam indeks dan menentukan logika kustom yang dapat memberikan skor pencarian yang lebih tinggi ke dokumen yang cocok yang memenuhi kriteria yang ditentukan dalam profil. Anda bisa membuat beberapa profil penilaian, lalu menetapkan profil yang Anda inginkan untuk kueri.

Jika Anda membuat profil kustom, Anda dapat menjadikannya default dengan mengatur defaultScoringProfile. Untuk informasi selengkapnya, lihat Menambahkan profil penilaian ke indeks pencarian.

Semantik

Konfigurasi semantik adalah bagian dari definisi indeks yang digunakan untuk mengonfigurasi bidang mana yang digunakan oleh pencarian semantik untuk peringkat, keterangan, sorotan, dan jawaban. Konfigurasi semantik terdiri dari bidang judul, bidang konten yang diprioritaskan, dan bidang kata kunci yang diprioritaskan. Setidaknya satu bidang perlu ditentukan untuk masing-masing dari tiga subproperti (titleField, prioritizedKeywordsFields dan prioritizedContentFields). Bidang jenis Edm.String apa pun atau Collection(Edm.String) dapat digunakan sebagai bagian dari konfigurasi semantik.

Untuk menggunakan pencarian semantik, Anda harus menentukan nama konfigurasi semantik pada waktu kueri. Untuk informasi selengkapnya, lihat Membuat kueri semantik.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "name of the semantic configuration",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "..."
               },
           "prioritizedContentFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ]
         }
       }
     ]
   }
}
Atribut Deskripsi
nama Wajib diisi. Nama konfigurasi semantik.
prioritizedFields Wajib diisi. Menjelaskan bidang judul, konten, dan kata kunci yang akan digunakan untuk peringkat, keterangan, sorotan, dan jawaban semantik. Setidaknya salah satu dari tiga subproperti (titleField, prioritizedKeywordsFields dan prioritizedContentFields) perlu ditetapkan.
prioritizedFields.titleField Menentukan bidang judul yang akan digunakan untuk peringkat, keterangan, sorotan, dan jawaban semantik. Jika Anda tidak memiliki bidang judul di indeks Anda, biarkan bidang ini kosong.
prioritizedFields.prioritizedContentFields Menentukan bidang konten yang akan digunakan untuk peringkat, keterangan, sorotan, dan jawaban semantik. Untuk hasil terbaik, bidang yang dipilih harus berisi teks dalam bentuk bahasa alami. Urutan bidang dalam array mewakili prioritasnya. Bidang dengan prioritas lebih rendah mungkin terpotong jika kontennya panjang.
prioritizedFields.prioritizedKeywordsFields Menentukan bidang kata kunci yang akan digunakan untuk peringkat, keterangan, sorotan, dan jawaban semantik. Untuk hasil terbaik, bidang yang dipilih harus berisi daftar kata kunci. Urutan bidang dalam array mewakili prioritasnya. Bidang dengan prioritas lebih rendah mungkin terpotong jika kontennya panjang.

Kesamaan

Properti opsional yang berlaku untuk layanan yang dibuat sebelum 15 Juli 2020. Untuk layanan tersebut, Anda dapat mengatur properti ini untuk menggunakan algoritma peringkat BM25 yang diperkenalkan pada Juli 2020. Nilai yang valid termasuk "#Microsoft.Azure.Search.ClassicSimilarity" (default sebelumnya) atau "#Microsoft.Azure.Search.BM25Similarity".

Untuk semua layanan yang dibuat setelah Juli 2020, pengaturan properti ini tidak berpengaruh. Semua layanan yang lebih baru menggunakan BM25 sebagai algoritma peringkat tunggal untuk pencarian teks lengkap. Untuk informasi selengkapnya, lihat Algoritma peringkat di Azure AI Search.

pemberi saran

Menentukan konstruksi yang menyimpan awalan untuk pencocokan pada kueri parsial seperti lengkapi otomatis dan saran.

Atribut Deskripsi
nama Wajib diisi. Nama pemberi saran.
sourceFields Wajib diisi. Satu atau beberapa bidang string tempat Anda mengaktifkan pelengkapan otomatis atau hasil yang disarankan.
searchMode Diperlukan, dan selalu atur ke analyzingInfixMatching. Ini menentukan bahwa pencocokan terjadi pada istilah apa pun dalam string kueri.

vectorSearch

Objek vectorSearch memungkinkan konfigurasi properti pencarian vektor. Hanya konfigurasi algoritma yang dapat dikonfigurasi saat ini. Ini memungkinkan konfigurasi jenis algoritma dan parameter algoritma yang digunakan untuk bidang vektor. Anda dapat memiliki beberapa konfigurasi. Konfigurasi apa pun yang direferensikan oleh bidang vektor tidak dapat dimodifikasi atau dihapus. Konfigurasi apa pun yang tidak direferensikan dapat dimodifikasi atau dihapus. Definisi bidang vektor (dalam kumpulan bidang) harus menentukan konfigurasi algoritma pencarian vektor mana (melalui vectorSearchConfiguration properti ) yang digunakan bidang.

"vectorSearch": {
    "algorithmConfigurations": [
        {
            "name": "my-vector-config",
            "kind": "hnsw",
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]
}
Atribut Deskripsi
nama Wajib diisi. Nama konfigurasi algoritma.
jenis Jenis algoritma yang akan digunakan. Hanya '"hnsw"' yang didukung, yang merupakan algoritma Hierarkis Navigable Small World (HNSW).
hnswParameters Pilihan. Parameter untuk algoritma "hnsw". Jika objek ini dihilangkan, nilai default akan digunakan.

hnswParameters

Objek ini berisi kustomisasi untuk hnsw parameter algoritma. Semua properti bersifat opsional dan nilai default digunakan jika ada yang dihilangkan.

Atribut Deskripsi
Metrik String. Metrik kesamaan yang digunakan untuk perbandingan vektor. Untuk hnsw, nilai yang diizinkan adalah "kosinus", "euclidean", dan "dotProduct". Nilai defaultnya adalah "kosinus".
m Bilangan bulat. Jumlah tautan dua arah yang dibuat untuk setiap elemen baru selama konstruksi. Nilai default-nya adalah 4. Rentang yang diizinkan adalah 4 hingga 10. Nilai yang lebih besar menyebabkan grafik yang lebih padat, meningkatkan performa kueri, tetapi memerlukan lebih banyak memori dan komputasi.
efConstruction Bilangan bulat. Ukuran daftar dinamis untuk tetangga terdekat yang digunakan selama pengindeksan. Defaultnya adalah 400. Rentang yang diizinkan adalah nilai 100 hingga 1000.Larger menyebabkan kualitas indeks yang lebih baik, tetapi membutuhkan lebih banyak memori dan komputasi.
efSearch Bilangan bulat. Ukuran daftar dinamis yang berisi tetangga terdekat, yang digunakan selama waktu pencarian. Defaultnya adalah 500. Rentang yang diizinkan adalah 100 hingga 1000. Meningkatkan parameter ini dapat meningkatkan hasil pencarian, tetapi memperlambat performa kueri.

Karena efSearch merupakan parameter waktu kueri, nilai ini dapat diperbarui meskipun bidang yang ada menggunakan konfigurasi algoritma.

Lihat juga