Bagikan melalui


Buat atau Perbarui Indeks (Pratinjau REST API)

Berlaku untuk: 2023-07-01-Preview. Versi ini tidak lagi didukung. Tingkatkan segera ke versi yang lebih baru.

Penting

2023-07-01-Preview menambahkan pencarian vektor.

  • objek "vectorSearch", konfigurasi pengaturan pencarian vektor. Hanya berlaku untuk algoritma pencarian vektor.
  • "Collection(Edm.Single)" jenis data, 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 04-30 2021 menambahkan:

  • "semanticConfiguration" digunakan untuk mencakup peringkat semantik ke bidang tertentu.
  • "identitas", di bawah "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 kumpulan bidang (nama bidang, jenis data, dan atribut), tetapi juga konstruksi lain (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 apa pun 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 indeks dan membangun kembali. 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 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.

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

Pembaruan untuk 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. Mengatur bendera allowIndexDowntime 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 hingga indeks kembali online dan siap menangani permintaan.

Parameter URI

Parameter Deskripsi
nama layanan Diperlukan. 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 Diperlukan. Lihat versi API untuk versi lainnya.
allowIndexDowntime Fakultatif. False 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.

Header Permintaan

Tabel berikut ini menjelaskan header permintaan yang diperlukan dan opsional.

Bidang Deskripsi
Tipe Isi Diperlukan. 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 api-key yang diatur ke kunci admin Anda (dibandingkan dengan kunci kueri). Lihat Sambungkan ke Azure AI Search menggunakan autentikasi utama untuk detailnya.

Isi Permintaan

Isi permintaan berisi definisi skema, yang mencakup daftar bidang data dalam dokumen yang dimasukkan 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:

Harta benda Deskripsi
Nama Diperlukan. 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 Fakultatif. 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 Fakultatif. Digunakan untuk penyetelan relevansi untuk kueri teks lengkap.
semantik Fakultatif. Menentukan parameter indeks pencarian yang memengaruhi kemampuan pencarian semantik. Konfigurasi semantik diperlukan untuk kueri semantik. Untuk informasi selengkapnya, lihat Membuat kueri semantik.
vektorSearch Fakultatif. Mengonfigurasi berbagai pengaturan pencarian vektor. Hanya algoritma pencarian vektor yang dapat dikonfigurasi.
normalizer Fakultatif. Menormalkan urutan leksikografis string, menghasilkan pengurutan dan output pemfilteran yang tidak peka huruf besar/kecil.
penganalisis, charFilters, tokenizer, tokenFilters Fakultatif. 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 Fakultatif. Digunakan untuk kueri lintas asal ke indeks Anda.
encryptionKey Fakultatif. Digunakan untuk enkripsi ekstra indeks, melalui kunci enkripsi yang dikelola pelanggan (CMK) di Azure Key Vault. Tersedia untuk layanan pencarian yang dapat ditagih yang dibuat pada atau setelah 2019-01-01.

Jawaban

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 header permintaan Prefer 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) 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 "dapat difilter", "dapat diurutkan", "dapat difaset", "penganalisis", "normalizer", dan "synonymMaps" diabaikan untuk bidang vektor. Demikian juga, jika Anda mengatur properti khusus vektor seperti "dimensi" atau "vectorSearchConfiguration" di bidang yang berisi konten alfa-numerik, 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 : Kumpulan 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 default). Setelah pemberi saran ditentukan, Anda dapat mereferensikannya berdasarkan nama pada permintaan kueri yang menggunakan Suggestions API atau Autocomplete API, 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

analyzer 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 kustom dan normalizer untuk "Tag". Ini juga menunjukkan normalizer yang telah ditentukan (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 ikut serta ke 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 atribut corsOptions. 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 harus 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 bidang. Untuk menggunakannya, Anda menentukan profil berdasarkan 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 pengurutan, faset, dan output 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.
vektorSearch 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 Diperlukan. Daftar asal yang dibatasi koma yang diberikan akses ke indeks Anda, di mana setiap asal biasanya dari formulir protocol://<>nama domain yang sepenuhnya memenuhi syarat:> port<(meskipun port <> sering dihilangkan). Ini berarti bahwa setiap kode JavaScript yang dilayani dari asal tersebut diizinkan untuk mengkueri indeks Anda (dengan asumsi menyediakan kunci API yang valid). Jika Anda ingin mengizinkan akses ke semua asal, tentukan * sebagai item tunggal dalam array "allowedOrigins". Ini tidak disarankan untuk produksi, tetapi mungkin berguna untuk pengembangan atau penelusuran kesalahan.
maxAgeInSeconds Fakultatif. Browser menggunakan nilai ini untuk menentukan durasi (dalam detik) untuk menyimpan respons preflight CORS. Ini harus bilangan bulat non-negatif. Performa meningkat jika nilai ini lebih besar, tetapi keuntungan tersebut diimbangi oleh jumlah waktu yang diperlukan agar perubahan kebijakan CORS berlaku. Jika tidak diatur, durasi default 5 menit akan digunakan.

defaultScoringProfile

Fakultatif. 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 tambahan kunci enkripsi yang dikelola pelanggan (CMK). 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 Diperlukan. Nama kunci Azure Key Vault yang digunakan untuk enkripsi.
keyVaultKeyVersion Diperlukan. Versi kunci Azure Key Vault.
keyVaultUri Diperlukan. URI Azure Key Vault (juga disebut sebagai nama DNS) yang menyediakan kuncinya. Contoh URI mungkin https://my-keyvault-name.vault.azure.net
accessCredentials Fakultatif. 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 Microsoft Azure AD yang ditentukan).
identitas Opsional kecuali Anda menggunakan identitas terkelola yang ditetapkan pengguna untuk koneksi layanan pencarian ke Azure Key Vault. Formatnya "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]".

Bidang

Berisi informasi tentang atribut pada definisi bidang.

Atribut Deskripsi
Nama Diperlukan. Mengatur nama bidang, yang harus unik dalam kumpulan bidang indeks atau bidang induk.
jenis Diperlukan. 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 titik mengambang presisi tunggal. Ini hanya digunakan untuk bidang vektor, dan diperlukan. Lihat Jenis data yang didukung untuk daftar lengkap jenis yang didukung.
kunci Diperlukan. 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 peka huruf besar/kecil saat mencari atau mengindeks dokumen. Lihat Dokumen Pencarian dan Menambahkan, Memperbarui, atau Menghapus Dokumen untuk detailnya.
Dpt Menunjukkan apakah bidang dapat dikembalikan dalam hasil pencarian. Atur atribut ini ke false jika Anda ingin menggunakan bidang (misalnya, margin) sebagai mekanisme filter, pengurutan, atau 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 ke true tidak menyebabkan peningkatan persyaratan penyimpanan indeks. Defaultnya adalah true untuk bidang sederhana dan null untuk bidang kompleks.
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 token individu "cerah" dan "hari". Ini memungkinkan pencarian teks lengkap untuk istilah-istilah ini. Bidang tipe 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 Azure AI Search untuk detailnya.
dapat difilter Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam kueri $filter. 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 seperti itu f 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.
Sortable Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam ekspresi $orderby. Secara default Pencarian Azure AI 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 bidang tersebut multinilai. Subbidang sederhana koleksi kompleks juga multinilai, dan oleh karena itu tidak dapat diurutkan. Ini benar apakah itu bidang induk langsung, atau bidang leluhur, itulah koleksi kompleks. Bidang kompleks tidak dapat diurutkan dan atribut yang dapat diurutkan harus null untuk bidang tersebut. Default untuk dapat diurutkan true untuk bidang sederhana bernilai tunggal, false untuk bidang sederhana multinilai, dan null untuk bidang kompleks.
dapat difaset Menunjukkan apakah akan mengaktifkan bidang yang akan direferensikan dalam kueri faset. Biasanya digunakan dalam presentasi hasil pencarian yang mencakup hit hit berdasarkan kategori (misalnya, mencari kamera digital dan melihat hit berdasarkan merek, berdasarkan megapiksel, berdasarkan harga, dan sebagainya). Atribut ini harus null untuk bidang kompleks. Bidang tipe 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 hadapi.
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 . Defaultnya 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 tersebut. 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 sudah 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 tersebut. 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 yang tepat pada teks verbatim dan tidak dianalisis. Atribut ini hanya dapat digunakan dengan bidang Edm.String dan Collection(Edm.String) yang memiliki setidaknya salah satu bidang 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 sebelumnya 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 null atau koleksi kosong untuk bidang kompleks.
Bidang Daftar sub-bidang 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 kapan menggunakan subbidang.
Dimensi Integer. Diperlukan untuk bidang vektor. **Ini harus cocok dengan ukuran penyematan output model penyematan Anda. Misalnya, untuk model Azure OpenAI populer text-embedding-ada-002, dimensi outputnya adalah 1536, jadi ini akan menjadi dimensi yang akan diatur untuk bidang vektor tersebut. Atribut dimensi memiliki minimal 2 dan maksimum 2048 nilai titik pecahan masing-masing.
vectorSearchConfiguration Diperlukan untuk definisi bidang vektor. Menentukan nama konfigurasi algoritma "vectorSearch" 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.

Nota

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 di Azure AI Search 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, dapat 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 Diperlukan. Bidang string yang menentukan normalizer kustom yang ditentukan pengguna.
charFilters Digunakan dalam normalizer kustom. Ini bisa menjadi satu atau beberapa filter karakter tersedia didukung untuk digunakan dalam normalizer kustom: pemetaan

pattern_replace
tokenFilters Digunakan dalam normalizer kustom. Ini bisa menjadi satu atau beberapa tilter token tersedia didukung untuk digunakan dalam normalizer kustom: arabic_normalizationasciifoldingcjk_widthelisigerman_normalizationhindi_normalizationindic_normalizationpersian_normalizationscandinavian_normalizationscandinavian_foldingsorani_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 untuk mencocokkan dokumen yang memenuhi kriteria yang ditentukan dalam profil. Anda bisa membuat beberapa profil penilaian, lalu menetapkan profil yang ingin Anda 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 apa pun Edm.String 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 Diperlukan. Nama konfigurasi semantik.
prioritizedFields Diperlukan. 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 semantik, keterangan, sorotan, dan jawaban. Jika Anda tidak memiliki bidang judul dalam indeks Anda, biarkan bidang ini kosong.
prioritizedFields.prioritizedContentFields Menentukan bidang konten yang akan digunakan untuk peringkat semantik, keterangan, sorotan, dan jawaban. Untuk hasil terbaik, bidang yang dipilih harus berisi teks dalam bentuk bahasa alami. Urutan bidang dalam array mewakili prioritasnya. Bidang dengan prioritas yang lebih rendah mungkin terpotong jika kontennya panjang.
prioritizedFields.prioritizedKeywordsFields Menentukan bidang kata kunci yang akan digunakan untuk peringkat semantik, keterangan, sorotan, dan jawaban. Untuk hasil terbaik, bidang yang dipilih harus berisi daftar kata kunci. Urutan bidang dalam array mewakili prioritasnya. Bidang dengan prioritas yang 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 Diperlukan. Nama pemberi saran.
sourceFields Diperlukan. Satu atau beberapa bidang string tempat Anda mengaktifkan pelengkapan otomatis atau hasil yang disarankan.
searchMode Diperlukan, dan selalu diatur 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 dirujuk oleh bidang vektor tidak dapat dimodifikasi atau dihapus. Konfigurasi apa pun yang tidak dirujuk dapat dimodifikasi atau dihapus. Definisi bidang vektor (dalam kumpulan bidang) harus menentukan konfigurasi algoritma pencarian vektor mana (melalui properti vectorSearchConfiguration) yang digunakan bidang.

"vectorSearch": {
    "algorithmConfigurations": [
        {
            "name": "my-vector-config",
            "kind": "hnsw",
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]
}
Atribut Deskripsi
Nama Diperlukan. Nama konfigurasi algoritma.
jenis Jenis algoritma yang akan digunakan. Hanya '"hnsw"' yang didukung, yang merupakan algoritma Hierarkis Navigable Small World (HNSW).
hnswParameters Fakultatif. 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 Tali. Metrik kesamaan yang digunakan untuk perbandingan vektor. Untuk hnsw, nilai yang diizinkan adalah "kosinus", "euclidean", dan "dotProduct". Nilai defaultnya adalah "kosinus".
m Integer. Jumlah tautan dua arah yang dibuat untuk setiap elemen baru selama konstruksi. Defaultnya adalah 4. Rentang yang diperbolehkan adalah 4 hingga 10. Nilai yang lebih besar menyebabkan grafik yang lebih padat, meningkatkan performa kueri, tetapi memerlukan lebih banyak memori dan komputasi.
efConstruction Integer. Ukuran daftar dinamis untuk tetangga terdekat yang digunakan selama pengindeksan. Defaultnya adalah 400. Rentang yang diizinkan adalah nilai 100 hingga 1000.Lebih besar menyebabkan kualitas indeks yang lebih baik, tetapi membutuhkan lebih banyak memori dan komputasi.
efSearch Integer. Ukuran daftar dinamis yang berisi tetangga terdekat, yang digunakan selama waktu pencarian. Defaultnya adalah 500. Rentang yang diperbolehkan adalah 100 hingga 1000. Meningkatkan parameter ini dapat meningkatkan hasil pencarian, tetapi memperlambat performa kueri.

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

Lihat juga