Operator pengumpulan OData di Pencarian Azure AI - any dan all

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.

Saat menulis ekspresi filter OData untuk digunakan dengan Pencarian Azure AI, sering kali berguna untuk memfilter bidang koleksi. Anda dapat mencapai ini menggunakan operator any dan all.

Sintaks

EBNF berikut (Extended Backus-Naur Form) menentukan tata bahasa dari ekspresi OData yang menggunakan any atau all.

collection_filter_expression ::=
    field_path'/all(' lambda_expression ')'
    | field_path'/any(' lambda_expression ')'
    | field_path'/any()'

lambda_expression ::= identifier ':' boolean_expression

Diagram sintaksis interaktif juga tersedia:

Ada tiga bentuk ekspresi yang memfilter kumpulan.

  • Dua yang pertama melakukan iterasi pada bidang koleksi dengan menerapkan predikat yang diberikan dalam bentuk ekspresi lambda ke setiap elemen koleksi.
    • Ekspresi yang menggunakan all menampilkan true jika predikatnya adalah true untuk setiap elemen kumpulan.
    • Ekspresi yang menggunakan any menampilkan true jika predikatnya adalah true untuk minimal satu elemen kumpulan.
  • Bentuk ketiga filter kumpulan menggunakan any tanpa ekspresi lambda untuk menguji apakah bidang kumpulan kosong. Jika kumpulan memiliki elemen apa pun, maka akan menampilkan true. Jika kumpulan kosong, maka akan menampilkan false.

Ekspresi lambda dalam filter kumpulan mirip dengan isi perulangan dalam bahasa pemrograman. Ekspresi tersebut mendefinisikan variabel, yang disebut variabel rentang, yang menyimpan elemen kumpulan saat ini selama pengulangan. Ekspresi tersebut juga mendefinisikan ekspresi boolean lain yang merupakan kriteria filter untuk diterapkan ke variabel rentang untuk setiap elemen kumpulan.

Contoh

Mencocokkan dokumen di mana bidang tags berisi tepat string "wifi":

tags/any(t: t eq 'wifi')

Mencocokkan dokumen di mana setiap elemen bidang ratings berada di antara 3 dan 5, termasuk:

ratings/all(r: r ge 3 and r le 5)

Mencocokkan dokumen di mana setiap koordinat geografi di bidang locations berada dalam poligon tertentu:

locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))

Mencocokkan dokumen di mana bidang rooms kosong:

not rooms/any()

Cocokkan dokumen di mana untuk semua ruangan, bidang rooms/amenities berisi "tv", dan rooms/baseRate lebih kecil dari 100:

rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)

Batasan

Tidak setiap fitur ekspresi filter tersedia di dalam isi ekspresi lambda. Batasan dapat berbeda bergantung pada jenis data bidang kumpulan yang ingin Anda filter. Tabel berikut meringkas batasan.

Jenis Data Fitur yang diizinkan dalam ekspresi lambda dengan any Fitur yang diizinkan dalam ekspresi lambda dengan all
Collection(Edm.ComplexType) Semuanya kecuali search.ismatch dan search.ismatchscoring Sama
Collection(Edm.String) Perbandingan dengan eq atau search.in

Menggabungkan sub-ekspresi dengan or
Perbandingan dengan ne atau not search.in()

Menggabungkan sub-ekspresi dengan and
Collection(Edm.Boolean) Perbandingan dengan eq atau ne Sama
Collection(Edm.GeographyPoint) Menggunakan geo.distance dengan lt atau le

geo.intersects

Menggabungkan sub-ekspresi dengan or
Menggunakan geo.distance dengan gt atau ge

not geo.intersects(...)

Menggabungkan sub-ekspresi dengan and
Collection(Edm.DateTimeOffset),Collection(Edm.Double),Collection(Edm.Int32),Collection(Edm.Int64) Perbandingan menggunakan eq, ne, lt, gt, le, atau ge

Menggabungkan perbandingan dengan sub-ekspresi lain menggunakan or

Menggabungkan perbandingan kecuali ne dengan sub-ekspresi lain menggunakan and

Ekspresi menggunakan kombinasi and dan or dalam Bentuk Normal Disjungtif (DNF)
Perbandingan menggunakan eq, ne, lt, gt, le, atau ge

Menggabungkan perbandingan dengan sub-ekspresi lain menggunakan and

Menggabungkan perbandingan kecuali eq dengan sub-ekspresi lain menggunakan or

Ekspresi yang menggunakan kombinasi and dan or dalam Bentuk Normal Konjungtif (CNF)

Untuk detail selengkapnya tentang batasan ini serta contoh, lihat Memecahkan masalah filter koleksi di Pencarian Azure AI. Untuk informasi lebih mendalam tentang mengapa batasan ini ada, lihat Memahami filter koleksi di Pencarian Azure AI.

Langkah berikutnya