Sintaks kueri sederhana di Azure AI Search

Untuk skenario pencarian teks lengkap, Azure AI Search mengimplementasikan dua bahasa kueri berbasis Lucene, masing-masing selaras dengan pengurai kueri. Parser Kueri Sederhana adalah default. Ini mencakup kasus penggunaan umum dan upaya untuk menginterpretasikan permintaan bahkan jika tidak disusupi dengan sempurna. Pengurai lainnya adalah Lucene Query Parser dan mendukung konstruksi kueri yang lebih canggih.

Artikel ini adalah referensi sintaks kueri untuk pengurai kueri sederhana.

Sintaks kueri untuk kedua pengurai berlaku untuk ekspresi kueri yang diteruskan dalam search parameter permintaan kueri, tidak bingung dengan sintaks OData, dengan sintaks dan aturannya sendiri untuk filter ekspresi dan orderby dalam permintaan yang sama.

Meskipun pengurai sederhana didasarkan pada kelas Apache Lucene Simple Query Parser , implementasinya di Azure AI Search mengecualikan pencarian fuzzy. Jika Anda perlu pencarian samar, pertimbangkan sintaks kueri Lucene lengkap alternatif sebagai gantinya.

Contoh (sintaks sederhana)

Contoh ini memperlihatkan kueri sederhana, dibedakan oleh "queryType": "simple" dan sintaks yang valid. Meskipun jenis kueri diatur di bawah ini, ini adalah default dan dapat dihilangkan kecuali Anda kembali dari jenis alternatif. Contoh berikut adalah pencarian atas istilah independen, dengan persyaratan semua dokumen yang cocok termasuk "kumpulan".

POST https://{{service-name}}.search.windows.net/indexes/hotel-rooms-sample/docs/search?api-version=2020-06-30
{
  "queryType": "simple",
  "search": "budget hotel +pool",
  "searchMode": "all"
}

Parameter searchMode relevan dalam contoh ini. Setiap kali operator boolean berada di kueri, Anda umumnya harus mengatur searchMode=all untuk memastikan bahwa semua kriteria cocok. Jika tidak, Anda dapat menggunakan default searchMode=any yang mendukung pengenalan terhadap presisi.

Untuk contoh selengkapnya, lihat Contoh sintaks kueri sederhana. Untuk detail tentang permintaan dan parameter kueri, lihat Pencarian Dokumen (REST API).

Pencarian kata kunci pada istilah dan frasa

Untai (karakter) yang diteruskan ke parameter search dapat mencakup istilah atau frasa dalam bahasa, operator boolean, operator prioritas, kartubebas, atau karakter prefiks untuk kueri "dimulai dengan", karakter pelepasan, dan karakter pengodean URL. Parameter search bersifat opsional. Tidak ditentukan, pencarian ( search=* atau search=" " ) menampilan 50 dokumen teratas dalam urutan arbitrer (tidak berperingkat).

  • Pencarian istilah adalah kueri dari satu istilah atau lebih, saat salah satu istilah dianggap cocok.

  • Pencarian frasa adalah frasa yang tepat yang diapit dalam tanda kutip" ". Misalnya, sementara Roach Motel (tanpa tanda kutip) akan mencari dokumen yang berisi Roach dan/atau Motel di mana saja dalam urutan apa pun, "Roach Motel" (dengan tanda kutip) hanya akan cocok dengan dokumen yang berisi seluruh frasa tersebut bersama-sama dan dalam urutan tersebut (analisis leksikal masih berlaku).

    Bergantung pada klien pencarian Anda, Anda mungkin perlu melepaskan tanda kutip dalam pencarian frasa. Misalnya, dalam permintaan POST, pencarian frasa di "Roach Motel" dalam isi permintaan mungkin ditentukan sebagai "\"Roach Motel\"".

Secara default, semua string yang diteruskan dalam search parameter mengalami analisis leksikal. Pastikan Anda memahami perilaku tokenisasi penganalisis yang Anda gunakan. Sering kali, saat hasil kueri tidak terduga, alasannya dapat ditelusuri untuk mengetahui istilah ditokenisasi pada waktu kueri. Anda dapat menguji tokenisasi pada string tertentu untuk mengonfirmasi output.

Input teks apa pun dengan satu atau beberapa istilah dianggap sebagai titik awal yang valid untuk eksekusi kueri. Pencarian Azure AI akan mencocokkan dokumen yang berisi salah satu atau semua istilah, termasuk variasi apa pun yang ditemukan selama analisis teks.

Sesederhana ini terdengar, ada satu aspek eksekusi kueri di Azure AI Search yang mungkin menghasilkan hasil yang tidak terduga, meningkat daripada mengurangi hasil pencarian karena lebih banyak istilah dan operator ditambahkan ke string input. Apakah ekspansi ini benar-benar terjadi tergantung pada penyertaan operator NOT, dikombinasikan dengan searchMode pengaturan parameter yang menentukan bagaimana NOT ditafsirkan dalam hal AND atau OR perilaku. Untuk informasi selengkapnya, lihat operator di NOT bawah operator Boolean.

Operator Boolean

Anda dapat menyematkan operator Boolean dalam string kueri untuk meningkatkan presisi kecocokan. Dalam sintaks sederhana, operator boolean berbasis karakter. Operator teks, seperti kata AND, tidak didukung.

karakter Contoh Penggunaan
+ pool + ocean Sebuah AND operasi. Misalnya, pool + ocean menetapkan bahwa dokumen harus berisi kedua istilah tersebut.
| pool | ocean Operasi OR menemukan kecocokan ketika salah satu istilah ditemukan. Dalam contoh, mesin kueri akan mengembalikan kecocokan pada dokumen yang berisi atau poolocean atau keduanya. Karena OR adalah operator konjunsi default, Anda juga dapat membiarkannya keluar, sederajat pool ocean dengan pool | ocean.
- pool – ocean NOT Operasi mengembalikan kecocokan pada dokumen yang mengecualikan istilah.

Parameter searchMode pada permintaan kueri mengontrol apakah istilah dengan NOT operator ANDdied atau ORdied dengan istilah lain dalam kueri (dengan asumsi tidak ada operator boolean pada istilah lain). Nilai yang valid meliputi any atau all.

searchMode=any meningkatkan pengenalan kembali kueri dengan menyertakan lebih banyak hasil, dan secara default - akan ditafsirkan sebagai "OR NOT". Misalnya, pool - ocean akan cocok dengan dokumen yang berisi istilah pool atau yang tidak berisi istilah ocean.

searchMode=all meningkatkan presisi kueri dengan menyertakan lebih sedikit hasil, dan secara default - akan ditafsirkan sebagai "DAN TIDAK". Misalnya, dengan , kueri pool - ocean akan cocok dengan searchMode=anydokumen yang berisi istilah "kumpulan" dan semua dokumen yang tidak berisi istilah "laut". Istilah ini bisa dibilang perilaku yang lebih intuitif bagi operator -. Oleh karena itu, Anda harus mempertimbangkan untuk menggunakan searchMode=all, bukannya searchMode=any jika Anda ingin mengoptimalkan pencarian untuk presisi sebagai ganti pengenalan, dan. Pengguna Anda sering menggunakan operator - dalam pencarian.

Saat memutuskan pengaturan searchMode, pertimbangkan pola interaksi pengguna untuk kueri di berbagai aplikasi. Pengguna yang mencari informasi lebih cenderung menyertakan operator dalam kueri, dibandingkan dengan situs e-niaga yang memiliki struktur navigasi bawaan lebih banyak.

Kueri prefiks

Untuk kueri "dimulai dengan", tambahkan operator sufiks (*) sebagai tempat penampung untuk sisa istilah. Kueri prefiks harus dimulai dengan setidaknya satu karakter alfanumerik sebelum Anda dapat menambahkan operator sufiks.

karakter Contoh Penggunaan
* lingui* akan cocok pada "linguistic" atau "linguini" Tanda bintang (*) mewakili satu atau lebih karakter dengan panjang arbriter, mengabaikan kasus.

Mirip dengan filter, kueri prefiks mencari kecocokan persis. Dengan demikian, tidak ada penilaian relevansi (semua hasil menerima skor pencarian 1,0). Ketahuilah bahwa kueri prefiks bisa lambat, terutama jika indeks besar dan prefiks terdiri dari sejumlah kecil karakter. Metodologi alternatif, seperti tokenisasi n-gram tepi, mungkin berkinerja lebih cepat. Istilah yang menggunakan pencarian awalan tidak boleh lebih dari 1000 karakter.

Sintaks sederhana hanya mendukung pencocokan prefiks. Untuk pencocokan sufiks atau infiks terhadap akhir atau tengah istilah, gunakan sintaks Lucene lengkap untuk pencarian kartubebas.

Pelepasan operator pencarian

Dalam sintaks sederhana, operator pencarian menyertakan karakter ini: + | " ( ) ' \

Jika salah satu karakter ini adalah bagian dari token dalam indeks, melepaskannya dengan memberinya prefiks dengan satu garis miring terbalik (\) dalam kueri. Misalnya, Anda menggunakan penganalisis kustom untuk tokenisasi istilah utuh, dan indeks Anda berisi untai (karakter) "Luxury+Hotel". Untuk mendapatkan kecocokan persis pada token ini, masukkan karakter pelepasan: search=luxury\+hotel.

Untuk mempermudah kasus yang lebih umum, ada dua pengecualian untuk aturan ini di mana pelepasan tidak diperlukan:

  • Operator NOT - hanya perlu melepaskan jika itu adalah karakter pertama setelah spasi putih. Jika muncul - di tengah (misalnya, di 3352CDD0-EF30-4A2E-A512-3B30AF40F3FD), Anda dapat melompati pelepasan.

  • Operator sufiks * hanya perlu melepaskan jika itu adalah karakter terakhir sebelum spasi putih. Jika muncul * di tengah (misalnya, di 4*4=16), tidak diperlukan pelepasan.

Catatan

Secara default, penganalisis standar akan menghapus dan memecah kata-kata pada tanda hubung, spasi putih, simbol "dan", dan karakter lain selama analisis leksikal. Jika Anda memerlukan karakter khusus untuk tetap berada dalam untai (karakter) kueri, Anda mungkin memerlukan penganalisis yang mempertahankannya dalam indeks. Beberapa pilihan termasuk Penganalisis bahasa alami Microsoft, yang mempertahankan kata-kata yang dipenggal, atau penganalisis kustom untuk pola yang lebih kompleks. Untuk informasi selengkapnya, lihat Istilah parsial, pola, dan karakter khusus.

Mengodekan karakter tidak aman dan karakter khusus dalam URL

Pastikan semua karakter tidak aman dan karakter khusus dikodekan dalam URL. Misalnya, '#' adalah karakter yang tidak aman karena merupakan pengidentifikasi fragmen/jangkar dalam URL. Karakter harus dikodekan ke %23 jika digunakan dalam URL. '&' dan '=' adalah contoh karakter yang dipesan saat memisahkan parameter dan menentukan nilai dalam Azure AI Search. Untuk informasi selengkapnya, lihat RFC1738: Uniform Resource Locators (URL).

Karakter yang tidak aman adalah " ` < > # % { } | \ ^ ~ [ ]. Karakter khusus adalah ; / ? : @ = + &.

Karakter khusus

Karakter khusus dapat berkisar dari simbol mata uang seperti '$' atau '€', hingga emoji. Banyak penganalisis, termasuk penganalisis standar default, akan mengecualikan karakter khusus selama pengindeksan, yang berarti mereka tidak akan diwakili dalam indeks Anda.

Jika Anda memerlukan representasi karakter khusus, Anda dapat menetapkan penganalisis yang mempertahankannya:

  • Penganalisis spasi putih mempertimbangkan urutan karakter apa pun yang dipisahkan oleh spasi kosong sebagai token (sehingga emoji '❤' akan dianggap sebagai token).

  • Penganalisis bahasa, seperti penganalisis Bahasa Inggris Microsoft (en.microsoft), akan mengambil string '$' atau '€' sebagai token.

Untuk konfirmasi, Anda dapat menguji penganalisis untuk melihat token apa yang dihasilkan untuk string tertentu. Seperti yang Anda harapkan, Anda mungkin tidak mendapatkan tokenisasi penuh dari satu penganalisis. Solusinya adalah membuat beberapa bidang yang berisi konten yang sama, tetapi dengan penetapan penganalisis yang berbeda (misalnya, , description_en, description_frdan sebagainya untuk penganalisis bahasa).

Saat menggunakan karakter Unicode, pastikan simbol diloloskan dengan benar di url kueri (misalnya '❤' akan menggunakan urutan %E2%9D%A4+escape ). Beberapa klien web melakukan terjemahan ini secara otomatis.

Prioritas (pengelompokan)

Anda dapat menggunakan tanda kurung untuk membuat subkueri, termasuk operator dalam pernyataan kurung. Misalnya, motel+(wifi|luxury) akan mencari dokumen yang berisi istilah "motel" dan "wifi" atau "luxury" (atau keduanya).

Batas ukuran kueri

Jika aplikasi Anda menghasilkan kueri pencarian secara terprogram, sebaiknya merancangnya sedemikian sehingga tidak menghasilkan kueri dengan ukuran yang tidak terbatas.

  • Untuk GET, panjang URL tidak boleh melebihi 8 KB.

  • Untuk POST (dan permintaan lainnya), di mana isi permintaan menyertakan search dan parameter lain seperti filter dan orderby, ukuran maksimum adalah 16 MB. Batas tambahan meliputi:

    • Panjang maksimum klausa pencarian adalah 100.000 karakter.
    • Jumlah maksimum klausa dalam (ekspresi yang dipisahkan search oleh AND atau OR) adalah 1024.
    • Ukuran istilah pencarian maksimum adalah 1000 karakter untuk pencarian awalan.
    • Ada juga batas sekitar 32 KB pada ukuran setiap istilah individu dalam kueri.

Untuk informasi selengkapnya tentang batas kueri, lihat Batas permintaan API.

Langkah berikutnya

Jika Anda akan membuat kueri secara terprogram, tinjau Pencarian teks lengkap di Azure AI Search untuk memahami tahapan pemrosesan kueri dan implikasi analisis teks.

Anda juga bisa meninjau artikel berikut ini untuk mempelajari selengkapnya tentang konstruksi kueri: