Normalisasi teks untuk pemfilteran, faset, dan pengurutan yang tidak peka huruf besar/kecil

Catatan

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Dalam Pencarian Azure AI, normalizer adalah komponen yang memproses teks sebelumnya untuk pencocokan kata kunci pada bidang yang ditandai sebagai "dapat difilter", "dapat difaset", atau "dapat diurutkan". Berbeda dengan bidang teks lengkap "dapat dicari" yang dipasangkan dengan penganalisis teks, konten yang dibuat untuk operasi pengurutan faset filter tidak menjalani analisis atau tokenisasi. Pengabaian analisis teks dapat menghasilkan hasil yang tidak terduga ketika perbedaan huruf besar-kecil dan karakter muncul, itulah sebabnya Anda memerlukan normalizer untuk menyamakan variasi dalam konten Anda.

Dengan menerapkan normalizer, Anda dapat mencapai transformasi teks ringan yang meningkatkan hasil:

  • Casing yang konsisten (seperti semua huruf kecil atau huruf besar)
  • Menormalkan aksen dan diakritik seperti ö atau ê ke karakter setara ASCII "o" dan "e"
  • Memetakan karakter seperti - dan spasi kosong ke dalam karakter yang ditentukan pengguna

Manfaat Normalizer

Mencari dan mengambil dokumen dari indeks pencarian memerlukan pencocokan input kueri dengan konten dokumen. Pencocokan dilakukan terhadap konten yang ditokenisasi, seperti halnya ketika Anda memanggil "pencarian", atau pada konten yang tidak ditokenisasi jika permintaannya adalah operasi filter, faset, atau orderby.

Karena konten yang tidak ditokenisasi juga tidak dianalisis, perbedaan kecil dalam konten dievaluasi sebagai nilai yang berbeda. Pertimbangkan contoh berikut:

  • $filter=City eq 'Las Vegas' hanya akan mengembalikan dokumen yang berisi teks "Las Vegas" yang tepat dan mengecualikan dokumen dengan "LAS VEGAS" dan "las vegas", yang tidak memadai ketika kasus penggunaan memerlukan semua dokumen tanpa memperhitungkan kasing.

  • search=*&facet=City,count:5 akan mengembalikan "Las Vegas", "LAS VEGAS" dan "las vegas" sebagai nilai yang berbeda meskipun merupakan kota yang sama.

  • search=usa&$orderby=City akan mengembalikan kota dalam urutan leksikografis: "Las Vegas", "Seattle", "las vegas" bahkan jika niatnya adalah untuk mengurutkan kota yang sama tanpa memedulikan huruf besar/kecil.

Sebuah normalizer, yang dipanggil selama proses pengindeksan dan eksekusi kueri, menambahkan transformasi ringan yang memuluskan perbedaan kecil dalam teks untuk skenario penyaringan, pemfacetan, dan pengurutan. Dalam contoh sebelumnya, varian "Las Vegas" akan diproses sesuai dengan normalizer yang Anda pilih (misalnya, semua teks diubah menjadi huruf kecil) agar memperoleh hasil yang lebih seragam.

Cara menentukan normalizer

Normalizers ditentukan dalam definisi indeks, pada setiap bidang secara individual, pada bidang teks (Edm.String dan Collection(Edm.String)) yang memiliki setidaknya salah satu dari properti "dapat difilter", "dapat diurutkan", atau "dapat difaset" yang disetel ke nilai true. Mengatur normalizer bersifat opsional dan null secara default. Sebaiknya evaluasi normalizer yang telah ditentukan sebelumnya sebelum mengonfigurasi yang kustom.

Normalizer hanya dapat ditentukan ketika Anda menambahkan bidang baru ke indeks, jadi jika memungkinkan, cobalah untuk menilai kebutuhan normalisasi di muka dan menetapkan normalizer pada tahap awal pengembangan saat menghilangkan dan membuat ulang indeks adalah rutin.

  1. Saat membuat definisi bidang dalam indeks, atur properti "normalizer" ke salah satu nilai berikut: normalizer yang telah ditentukan sebelumnya seperti "huruf kecil", atau normalizer kustom (ditentukan dalam skema indeks yang sama).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. Normalizer kustom didefinisikan pada bagian "normalizers" pada indeks terlebih dahulu, lalu ditetapkan ke definisi bidang seperti yang ditunjukkan pada langkah sebelumnya. Untuk informasi selengkapnya, lihat Membuat Indeks dan juga Menambahkan normalizer kustom.

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "normalizer": "my_custom_normalizer"
     },
    

Catatan

Untuk mengubah normalizer bidang yang ada, bangun ulang indeks sepenuhnya (Anda tidak dapat membangun ulang bidang individual).

Solusi yang baik untuk indeks produksi, di mana membangun kembali indeks mahal, adalah membuat bidang baru yang identik dengan yang lama tetapi dengan normalizer baru, dan menggunakannya sebagai pengganti yang lama. Gunakan Indeks Pembaruan untuk menggabungkan bidang baru dan mergeOrUpload untuk mengisinya. Nantinya, sebagai bagian dari layanan indeks yang direncanakan, Anda dapat membersihkan indeks untuk menghapus bidang usang.

Normalizer yang telah ditentukan dan kustom

Pencarian Azure AI menyediakan normalizer bawaan untuk kasus penggunaan umum bersama dengan kemampuan untuk menyesuaikan sesuai kebutuhan.

Kategori Deskripsi
Normalizer yang telah ditentukan sebelumnya Disediakan di luar kotak dan dapat digunakan tanpa konfigurasi apa pun.
Penyesuai normalizer1 Untuk skenario tingkat lanjut. Memerlukan konfigurasi yang ditentukan pengguna dari kombinasi elemen yang ada, yang terdiri dari filter karakter dan token.

(1) Normalizer kustom tidak menentukan tokenizer karena normalizer selalu menghasilkan satu token.

Menguji normalizer

Anda dapat menggunakan Test Analyzer (REST) untuk melihat cara normalizer memproses input.

Permintaan

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

  {
     "normalizer":"asciifolding",
     "text": "Vis-à-vis means Opposite"
  }

Respon

HTTP/1.1 200 OK

{
  "tokens": [
    {
      "token": "Vis-a-vis means Opposite",
      "startOffset": 0,
      "endOffset": 24,
      "position": 0
    }
  ]
}

Referensi normalisasi

Normalizer yang telah ditentukan sebelumnya

Nama Deskripsi dan Opsi
standar Mengubah teks menjadi huruf kecil diikuti dengan asciifolding.
huruf kecil Mengubah karakter menjadi huruf kecil.
huruf besar Mengubah karakter menjadi huruf besar.
asciifolding Mengubah karakter yang tidak ada di blok Unicode Latin Dasar ke setara ASCII mereka, jika ada. Misalnya, mengubah à ke a.
elisi Menghapus elemen elisi dari permulaan token.

Filter karakter yang didukung

Normalizer mendukung dua filter karakter yang identik dengan rekan-rekan mereka dalam filter karakter penganalisis kustom:

Filter token yang didukung

Daftar di bawah ini menunjukkan filter token yang didukung untuk normalizer dan merupakan subset dari filter token keseluruhan yang digunakan dalam penganalisis kustom.

Tambahkan normalizer kustom

Normaliser kustom ditentukan dalam skema indeks. Definisi mencakup nama, jenis, satu atau beberapa filter karakter dan filter token. Filter karakter dan filter token adalah blok penyusun untuk normalizer kustom dan bertanggung jawab atas pemrosesan teks. Filter ini diterapkan dari kiri ke kanan.

token_filter_name_1 adalah nama filter token, dan char_filter_name_1 merupakan char_filter_name_2 nama filter karakter (lihat filter token yang didukung dan tabel filter karakter yang didukungdi bawah ini untuk nilai yang valid).

"normalizers":(optional)[
   {
      "name":"name of normalizer",
      "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
      "charFilters":[
         "char_filter_name_1",
         "char_filter_name_2"
      ],
      "tokenFilters":[
         "token_filter_name_1"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"char_filter_name_1",
      "@odata.type":"#char_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
],
"tokenFilters":(optional)[
   {
      "name":"token_filter_name_1",
      "@odata.type":"#token_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
]

Normalizer kustom dapat ditambahkan selama pembuatan indeks atau nanti dengan memperbarui normalizer yang sudah ada. Menambahkan normalizer kustom ke indeks yang ada memerlukan bendera "allowIndexDowntime" ditentukan dalam Indeks Pembaruan dan akan menyebabkan indeks tidak tersedia selama beberapa detik.

Contoh normalizer kustom

Contoh di bawah ini mengilustrasikan definisi normalizer kustom dengan filter karakter dan filter token yang sesuai. Opsi kustom untuk filter karakter dan filter token ditentukan secara terpisah sebagai konstruksi bernama, lalu direferensikan dalam definisi normalizer seperti yang diilustrasikan di bawah ini.

  • Normalizer kustom bernama "my_custom_normalizer" didefinisikan di bagian "normalizer" dari definisi indeks.

  • Normalizer terdiri dari dua filter karakter dan tiga filter token: elisi, huruf kecil, dan filter asciifolding khusus "my_asciifolding".

  • Filter karakter pertama "map_dash" menggantikan semua tanda hubung dengan garis bawah sementara yang kedua "remove_whitespace" menghapus semua spasi.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false,
        },
        {
           "name":"city",
           "type":"Edm.String",
           "filterable": true,
           "facetable": true,
           "normalizer": "my_custom_normalizer"
        }
     ],
     "normalizers":[
        {
           "name":"my_custom_normalizer",
           "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenFilters":[              
              "my_asciifolding",
              "elision",
              "lowercase",
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

Lihat juga