共用方式為


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 運算式主體內使用。 這些限制會因您想要篩選的集合欄位數據類型而有所不同。 下表摘要說明限制。

資料類型 使用 any 的 Lambda 運算式所允許的功能 使用 all 的 Lambda 運算式所允許的功能
Collection(Edm.ComplexType) search.ismatchsearch.ismatchscoring 以外的一切 相同
Collection(Edm.String) 使用 eqsearch.in 的比較

結合子運算式與 or
使用 nenot search.in() 的比較

結合子運算式與 and
Collection(Edm.Boolean) 使用 eqne 的比較 相同
Collection(Edm.GeographyPoint) 使用 geo.distance 搭配 ltle

geo.intersects

結合子運算式與 or
使用 geo.distance 搭配 gtge

not geo.intersects(...)

結合子運算式與 and
Collection(Edm.DateTimeOffset)、 、 Collection(Edm.Double)Collection(Edm.Int32)Collection(Edm.Int64) 使用 eqneltgtlege 的比較

使用 or 結合與其他子運算式的比較

使用 and 結合 ne 以外的其他子運算式的比較

析取範式 (DNF) 中合併使用 andor 的運算式
使用 eqneltgtlege 的比較

使用 and 結合與其他子運算式的比較

使用 or 結合 eq 以外的其他子運算式的比較

合取範式 (CNF) 中合併使用 andor 的運算式

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

下一步