Membuat indeks untuk beberapa bahasa di Azure AI Search

Jika Anda memiliki string dalam beberapa bahasa, Anda dapat melampirkan penganalisis bahasa yang menganalisis string menggunakan aturan linguistik bahasa tertentu selama pengindeksan dan eksekusi kueri. Dengan penganalisis bahasa, Anda mendapatkan penanganan variasi karakter, tanda baca, dan bentuk akar kata yang lebih baik.

Azure AI Search mendukung penganalisis Microsoft dan Lucene. Secara default, mesin pencari menggunakan Standard Lucene, yang merupakan agnostik bahasa. Jika pengujian menunjukkan bahwa penganalisis default tidak cukup, ganti dengan penganalisis bahasa.

Dalam Azure AI Search, dua pola untuk mendukung beberapa bahasa meliputi:

  • Buat indeks khusus bahasa di mana semua konten alfanumerik berada dalam bahasa yang sama, dan semua bidang string yang dapat dicari dikaitkan untuk menggunakan penganalisis bahasa yang sama.

  • Buat indeks campuran dengan versi khusus bahasa dari setiap bidang (misalnya, description_en, description_fr, description_ko), lalu batasi pencarian teks lengkap hanya untuk bidang tersebut pada waktu kueri. Pendekatan ini berguna untuk skenario di mana varian bahasa hanya diperlukan pada beberapa bidang, seperti deskripsi.

Artikel ini berfokus pada langkah-langkah dan praktik terbaik untuk mengonfigurasi dan mengkueri bidang khusus bahasa dalam indeks campuran:

  • Tentukan bidang string untuk setiap varian bahasa.
  • Atur penganalisis bahasa di setiap bidang.
  • Pada permintaan kueri, atur searchFields parameter ke bidang tertentu, lalu gunakan select untuk mengembalikan hanya bidang yang memiliki konten yang kompatibel.

Catatan

Jika Anda menggunakan model bahasa besar dalam pola augmented generated (RAG) pengambilan, Anda dapat merekayasa permintaan untuk mengembalikan string yang diterjemahkan. Skenario tersebut di luar cakupan untuk artikel ini.

Prasyarat

Analisis bahasa berlaku untuk bidang jenis Edm.String yaitu searchable, dan yang berisi teks yang dilokalkan. Jika Anda juga memerlukan terjemahan teks, tinjau bagian berikutnya untuk melihat apakah pengayaan AI memenuhi kebutuhan Anda.

Bidang non-string dan bidang string yang tidak dapat dicari tidak menjalani analisis leksikal dan tidak ditokenisasi. Sebaliknya, mereka disimpan dan dikembalikan verbatim.

Menambahkan terjemahan teks

Artikel ini mengasumsikan string yang diterjemahkan sudah ada. Jika tidak demikian, Anda dapat melampirkan layanan Azure AI ke alur pengayaan, memanggil terjemahan teks selama pengindeksan. Terjemahan teks mengambil dependensi pada fitur pengindeks dan layanan Azure AI, tetapi semua penyiapan dilakukan dalam Azure AI Search.

Untuk menambahkan terjemahan teks, ikuti langkah-langkah berikut:

  1. Pastikan konten Anda berada di sumber data yang didukung.

  2. Buat sumber data yang menunjuk ke konten Anda.

  3. Buat set keterampilan yang menyertakan keterampilan Terjemahan Teks.

    Keterampilan Terjemahan Teks mengambil string tunggal sebagai input. Jika Anda memiliki beberapa bidang, dapat membuat set keterampilan yang memanggil Terjemahan Teks beberapa kali, sekali untuk setiap bidang. Atau, Anda dapat menggunakan keterampilan Penggabungan Teks untuk mengonsolidasikan konten beberapa bidang ke dalam satu string panjang.

  4. Buat indeks yang menyertakan bidang untuk string yang diterjemahkan. Sebagian besar artikel ini membahas desain indeks dan definisi bidang untuk mengindeks dan mengkueri konten multi-bahasa.

  5. Lampirkan sumber daya layanan Azure AI multi-wilayah ke set keterampilan Anda.

  6. Buat dan jalankan pengindeks, lalu terapkan panduan dalam artikel ini untuk mengkueri bidang yang diminati saja.

Tip

Terjemahan teks disertakan dalam wizard Impor data. Jika Anda memiliki sumber data yang didukung dengan teks yang ingin Anda terjemahkan, Anda dapat menelusuri wizard untuk mencoba fungsionalitas deteksi bahasa dan terjemahan sebelum menulis kode apa pun.

Menentukan bidang untuk konten dalam bahasa yang berbeda

Di Pencarian Azure AI, kueri menargetkan satu indeks. Pengembang yang ingin menyediakan string bahasa tertentu dalam satu pengalaman pencarian biasanya menentukan bidang khusus untuk menyimpan nilai: satu bidang untuk string bahasa Inggris, satu untuk bahasa Prancis, dan sebagainya.

Properti analyzer pada definisi bidang digunakan untuk mengatur penganalisis bahasa. Ini digunakan untuk pengindeksan dan eksekusi kueri.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Membuat dan memuat indeks

Langkah menengah adalah membangun dan mengisi indeks sebelum merumuskan kueri. Kami menyebutkan langkah ini di sini demi kelengkapan. Salah satu cara untuk menentukan ketersediaan indeks adalah dengan memeriksa daftar indeks di portal.

Membatasi kueri dan memangkas hasil

Parameter pada kueri digunakan untuk membatasi pencarian ke bidang tertentu lalu memangkas hasil semua bidang yang tidak membantu skenario Anda.

Parameter Tujuan
searchFields Membatasi pencarian teks penuh ke daftar bidang bernama.
select Memangkas respons untuk menyertakan hanya bidang yang Anda tentukan. Secara default, semua bidang yang dapat diambil dikembalikan. Parameter select memungkinkan Anda memilih parameter mana yang akan dikembalikan.

Mengingat tujuan membatasi pencarian ke bidang yang berisi string Prancis, Anda akan menggunakan searchFields untuk menargetkan kueri di bidang yang berisi string dalam bahasa tersebut.

Menentukan penganalisis pada permintaan kueri tidak diperlukan. Penganalisis bahasa pada definisi bidang menentukan analisis teks selama eksekusi kueri. Untuk kueri yang menentukan beberapa bidang, masing-masing memanggil penganalisis bahasa yang berbeda, istilah atau frasa diproses secara bersamaan oleh penganalisis yang ditetapkan untuk setiap bidang.

Secara default, pencarian mengembalikan semua bidang yang ditandai sebagai dapat diambil. Dengan demikian, Anda mungkin ingin mengecualikan bidang yang tidak sesuai dengan pengalaman pencarian bahasa tertentu yang ingin Anda berikan. Secara khusus, jika Anda membatasi pencarian ke bidang dengan string bahasa Prancis, Anda mungkin ingin mengecualikan bidang dengan string bahasa Inggris dari hasil Anda. select Menggunakan parameter kueri memberi Anda kontrol atas bidang mana yang dikembalikan ke aplikasi panggilan.

Contoh dalam REST

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Contoh dalam C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Meningkatkan bidang bahasa tertentu

Terkadang bahasa agen yang mengeluarkan kueri tidak diketahui, dalam hal ini kueri dapat dikeluarkan terhadap semua bidang secara bersamaan. Preferensi IA untuk hasil dalam bahasa tertentu dapat didefinisikan menggunakan profil penilaian. Dalam contoh di bawah ini, kecocokan yang ditemukan dalam deskripsi dalam bahasa Prancis dinilai lebih tinggi relatif terhadap kecocokan dalam bahasa lain:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Anda kemudian akan menyertakan profil penilaian dalam permintaan pencarian:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Langkah berikutnya