Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator logika OData di Pencarian Azure AI -
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.
Ekspresi filter OData di Pencarian Azure AI adalah ekspresi Boolean yang mengevaluasi ke true atau false. Anda dapat menulis filter yang kompleks dengan menulis serangkaian filter yang lebih sederhana dan menyusunnya menggunakan operator logis dari aljabar Boolean:
-
and: Operator biner yang mengevaluasi menjaditruejika sub-ekspresi kiri dan kanannya mengevaluasi menjaditrue. -
or: Operator biner yang mengevaluasi ketruejika salah satu sub-ekspresi kiri atau kanannya mengevaluasi ketrue. -
not: Operator uner yang mengevaluasi ketruejika sub-ekspresinya mengevaluasi kefalse, dan sebaliknya.
Ini, bersama dengan operator koleksi any dan all, memungkinkan Anda untuk membangun filter yang dapat mengekspresikan kriteria pencarian yang sangat kompleks.
Sintaks
EBNF (Extended Backus-Naur Form) berikut mendefinisikan tata bahasa ekspresi OData yang menggunakan operator logis.
logical_expression ::=
boolean_expression ('and' | 'or') boolean_expression
| 'not' boolean_expression
Diagram sintaksis interaktif juga tersedia:
Catatan
Lihat Referensi sintaks ekspresi OData untuk Pencarian Azure AI untuk EBNF lengkap.
Ada dua bentuk ekspresi logis: biner (and/or), di mana ada dua sub-ekspresi, dan uner (not), di mana hanya ada satu. Sub-ekspresi dapat menjadi ekspresi Boolean jenis apa pun:
- Variabel bidang atau rentang tipe
Edm.Boolean - Fungsi yang mengembalikan nilai tipe
Edm.Boolean, sepertigeo.intersectsatausearch.ismatch -
Ekspresi perbandingan, seperti
rating gt 4 -
Ekspresi koleksi, seperti
Rooms/any(room: room/Type eq 'Deluxe Room') - Literal Boolean
trueataufalse. - Ekspresi logis lain yang dibangun menggunakan
and,or, dannot.
Penting
Ada beberapa situasi di mana tidak semua jenis sub-ekspresi dapat digunakan dengan and/or, terutama di dalam ekspresi lambda. Lihat operator koleksi OData di Pencarian Azure AI untuk detailnya.
Operator logis dan null
Sebagian besar ekspresi Boolean seperti fungsi dan perbandingan tidak dapat menghasilkan nullnilai, dan operator logis tidak dapat diterapkan ke nullharfiah secara langsung (misalnya, x and null tidak dibolehkan). Namun, bidang Boolean bisa berupa null, jadi Anda perlu menyadari bagaimana operator and, or dan not berperilaku di hadapan null. Ini diringkas dalam tabel berikut, di mana b merupakan bidang tipe Edm.Boolean:
| Ekspresi | Hasil ketika badalah null |
|---|---|
b |
false |
not b |
true |
b eq true |
false |
b eq false |
false |
b eq null |
true |
b ne true |
true |
b ne false |
true |
b ne null |
false |
b and true |
false |
b and false |
false |
b or true |
true |
b or false |
false |
Ketika bidang Boolean b muncul dengan sendirinya dalam ekspresi filter, itu berperilaku seolah-olah telah ditulis b eq true, jadi jika b adalah null, ekspresi dievaluasi menjadi false. Demikian pula, not b berperilaku seperti not (b eq true), sehingga mengevaluasi ke true. Dengan cara ini, nullbidang berperilaku sama seperti false. Hal ini konsisten dengan bagaimana mereka berperilaku ketika dikombinasikan dengan ekspresi lain menggunakan and dan or, seperti yang ditunjukkan pada tabel di atas. Meskipun demikian, perbandingan langsung dengan false (b eq false) masih akan mengevaluasi ke false. Dengan kata lain, null tidak sama dengan false, meskipun berperilaku seperti itu dalam ekspresi Boolean.
Contoh
Cocokkan dokumen di mana rating bidang berada antara 3 dan 5, termasuk:
rating ge 3 and rating le 5
Cari dokumen di mana semua elemen di bidang ratings kurang dari 3 atau lebih besar dari 5:
ratings/all(r: r lt 3 or r gt 5)
Cocokkan dokumen di mana locationbidang berada dalam poligon yang diberikan, dan dokumen tidak berisi istilah "publik".
geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))') and not search.ismatch('public')
Cocokkan dokumen untuk hotel di Vancouver, Kanada di mana ada kamar deluxe dengan tarif dasar kurang dari 160:
Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)