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 運算式主體內使用。 這些限制會因您想要篩選的集合欄位數據類型而有所不同。 下表摘要說明限制。
資料類型 | 使用 any 的 Lambda 運算式所允許的功能 |
使用 all 的 Lambda 運算式所允許的功能 |
---|---|---|
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) |
使用 geo.distance 搭配 lt 或 le geo.intersects 結合子運算式與 or |
使用 geo.distance 搭配 gt 或 ge not geo.intersects(...) 結合子運算式與 and |
Collection(Edm.DateTimeOffset) 、 、 Collection(Edm.Double) 、 Collection(Edm.Int32) Collection(Edm.Int64) |
使用 eq 、ne 、lt 、gt 、le 或 ge 的比較 使用 or 結合與其他子運算式的比較 使用 and 結合 ne 以外的其他子運算式的比較 在析取範式 (DNF) 中合併使用 and 和 or 的運算式 |
使用 eq 、ne 、lt 、gt 、le 或 ge 的比較 使用 and 結合與其他子運算式的比較 使用 or 結合 eq 以外的其他子運算式的比較 在合取範式 (CNF) 中合併使用 and 和 or 的運算式 |
如需這些限制和範例的詳細資訊,請參閱 針對 Azure AI 搜尋中的收集篩選器進行疑難解答。 如需這些限制存在原因的詳細資訊,請參閱 瞭解 Azure AI 搜尋中的收集篩選器。