Operator logika OData di Pencarian Azure AI - and, or, not

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 menjadi true jika sub-ekspresi kiri dan kanannya mengevaluasi menjadi true.
  • or: Operator biner yang mengevaluasi ke true jika salah satu sub-ekspresi kiri atau kanannya mengevaluasi ke true.
  • not: Operator uner yang mengevaluasi ke true jika sub-ekspresinya mengevaluasi ke false, 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:

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, seperti geo.intersects atau search.ismatch
  • Ekspresi perbandingan, seperti rating gt 4
  • Ekspresi koleksi, seperti Rooms/any(room: room/Type eq 'Deluxe Room')
  • Literal Boolean true atau false.
  • Ekspresi logis lain yang dibangun menggunakan and, or, dan not.

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)

Langkah berikutnya