Bagikan melalui


Operator logis OData di Azure AI Search - and, , ornot

Ekspresi filter OData di Azure AI Search 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 ke true jika sub-ekspresi kiri dan kanannya mengevaluasi ke 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:

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, seperti geo.intersects atau search.ismatch
  • Ekspresi perbandingan, seperti rating gt 4
  • Ekspresi koleksi, seperti Rooms/any(room: room/Type eq 'Deluxe Room')
  • Harfiah 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 pengumpulan 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 mengevaluasi ke 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

Cocokkan dokumen di mana semua elemen ratingsbidang 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