Azure AI 搜尋中的 OData 集合運算符 - anyall

撰寫 OData 篩選表示式 以搭配 Azure AI 搜尋使用時,篩選集合欄位通常很有用。 您可以使用和 all 運算符來達成此目的any

語法

下列 EBNF (Extended Backus-Naur Form) 會定義使用 anyall的 OData 表達式文法。

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

lambda_expression ::= identifier ':' boolean_expression

您也可以使用互動式語法圖表:

注意

如需完整的EBNF,請參閱 Azure AI 搜尋 的 OData 表達式語法參考。

篩選集合的表達式有三種形式。

  • 前兩個逐一查看集合欄位,將 Lambda 運算式形式的述詞套用至集合的每個元素。
    • 如果集合的每個元素的述詞為 true,則使用 all 的運算式會傳回 true
    • 如果至少一個集合元素的述詞為 true,則使用 any 的運算式會傳回 true
  • 集合篩選的第三種形式會使用 any 沒有 Lambda 運算式來測試集合欄位是否空白。 如果集合有任何專案,則會傳 true回 。 如果集合是空的,則會傳 false回 。

集合篩選中的 Lambda 運算式就像程式設計語言中的循環主體。 它會定義稱為範圍變數的 變數,該變數會在反覆專案期間保存集合的目前專案。 它也會定義另一個布爾表達式,也就是要套用至集合中每個元素之範圍變數的篩選條件。

範例

比對欄位只包含字串 「wifi」 的檔案 tags

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

比對欄位的每個元素 ratings 介於 3 到 5 之間,包含下列項目的檔案:

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

比對欄位中任何地理座標 locations 位於指定多邊形內的檔案:

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

比對 rooms 欄位是空的檔案:

not rooms/any()

比對檔,其中(針對所有房間) rooms/amenities 字段包含「tv」,且 rooms/baseRate 小於 100:

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

限制

並非所有篩選表達式的功能都可以在 Lambda 運算式主體內使用。 這些限制會因您想要篩選的集合欄位數據類型而有所不同。 下表摘要說明限制。

資料類型 Lambda 運算式中允許的功能 any Lambda 運算式中允許的功能 all
Collection(Edm.ComplexType) 除了和以外的所有專案search.ismatchsearch.ismatchscoring 相同
Collection(Edm.String) eq 或的比較 search.in

結合子表達式與 or
ne 或的比較 not search.in()

結合子表達式與 and
Collection(Edm.Boolean) eq 或的比較 ne 相同
Collection(Edm.GeographyPoint) 搭配 lt 或使用geo.distancele

geo.intersects

結合子表達式與 or
搭配 gt 或使用geo.distancege

not geo.intersects(...)

結合子表達式與 and
Collection(Edm.DateTimeOffset)、 、 Collection(Edm.Double)Collection(Edm.Int32)Collection(Edm.Int64) 使用eq、、neltgtle或的比較ge

使用 結合與其他子表達式的比較 or

使用 與其他子表達式結合比較除外neand

使用與 or分離法線形式組合的and表示式 (DNF)
使用eq、、neltgtle或的比較ge

使用 結合與其他子表達式的比較 and

使用 與其他子表達式結合比較除外eqor

使用 與 or結合法型組合and的表示式 (CNF)

如需這些限制和範例的詳細資訊,請參閱 針對 Azure AI 搜尋中的收集篩選器進行疑難解答。 如需這些限制存在原因的詳細資訊,請參閱 瞭解 Azure AI 搜尋中的收集篩選器。

下一步