Azure AI 搜尋中的 OData 集合運算符 - any
和 all
撰寫 OData 篩選表示式 以搭配 Azure AI 搜尋使用時,篩選集合欄位通常很有用。 您可以使用和 all
運算符來達成此目的any
。
語法
下列 EBNF (Extended Backus-Naur Form) 會定義使用 any
或 all
的 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
。
- 如果集合的每個元素的述詞為 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.ismatch search.ismatchscoring |
相同 |
Collection(Edm.String) |
與 eq 或的比較 search.in 結合子表達式與 or |
與 ne 或的比較 not search.in() 結合子表達式與 and |
Collection(Edm.Boolean) |
與 eq 或的比較 ne |
相同 |
Collection(Edm.GeographyPoint) |
搭配 lt 或使用geo.distance le geo.intersects 結合子表達式與 or |
搭配 gt 或使用geo.distance ge not geo.intersects(...) 結合子表達式與 and |
Collection(Edm.DateTimeOffset) 、 、 Collection(Edm.Double) 、 Collection(Edm.Int32) Collection(Edm.Int64) |
使用eq 、、ne 、lt gt 、 le 或的比較ge 使用 結合與其他子表達式的比較 or 使用 與其他子表達式結合比較除外 ne and 使用與 or 分離法線形式組合的and 表示式 (DNF) |
使用eq 、、ne 、lt gt 、 le 或的比較ge 使用 結合與其他子表達式的比較 and 使用 與其他子表達式結合比較除外 eq or 使用 與 or 結合法型組合and 的表示式 (CNF) |
如需這些限制和範例的詳細資訊,請參閱 針對 Azure AI 搜尋中的收集篩選器進行疑難解答。 如需這些限制存在原因的詳細資訊,請參閱 瞭解 Azure AI 搜尋中的收集篩選器。