Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Операторы коллекции OData в поиске ИИ Azure -
Примечание.
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
При написании выражения фильтра OData для использования с Azure ИИ поиском, часто полезно отфильтровывать поля в коллекциях. Это можно сделать с использованием операторов any и all.
Синтаксис
Приведенная далее EBNF (расширенная форма Бэкуса-Наура) определяет грамматику выражения OData, в котором используется any или all.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
Кроме того, вам может помочь интерактивная схема синтаксиса:
Примечание.
См справочник по синтаксису выражений OData для Поиска Искусственного Интеллекта Azure для получения полного EBNF.
Существуют три формы выражений, которые фильтруют коллекции.
- Первые две итерации проходят по коллекции, применяя предикат, указанный в форме лямбда-выражения для каждого элемента коллекции.
- Выражение, использующее
all, возвращаетtrue, если значение предиката равно true для каждого элемента коллекции. - Выражение, использующее
any, возвращаетtrue, если значение предиката равно true хотя бы для одного элемента коллекция.
- Выражение, использующее
- Третья форма фильтра коллекции использует
anyбез лямбда–выражения и проверяет, пусто ли поле коллекции. Если в коллекции есть какие-либо элементы, возвращается значениеtrue. Если коллекция пуста, возвращается значениеfalse.
Лямбда–выражение в фильтре коллекции аналогично телу цикла в языке программирования. Оно определяет переменную, называемую переменная диапазона, в которой во время итерации хранится текущий элемент коллекции. Оно также определяет другое логическое выражение, которое является условием фильтрации и применяется к переменной диапазона для каждого элемента коллекции.
Примеры
Сопоставить документы, поле tags в которых содержит точную строку "wifi":
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)
Ограничения
Не все функции выражений-фильтров доступны в теле лямбда-выражения. Ограничения зависят от типа данных в поле фильтруемой коллекции. В следующей таблице обобщенные такие ограничения.
| Тип данных | Функции, допустимые в лямбда-выражениях с параметром any |
Функции, допустимые в лямбда-выражениях с параметром 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) |
Использование 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 Объединение сравнений, кроме выполненных с помощью оператора ne, с другими подвыражениями с помощью оператора and Выражения, в которых используются сочетания операторов and и or в дизъюнктивной нормальной форме (ДНФ) |
Сравнения с помощью оператора eq, ne, lt, gt, le или ge Объединение сравнений с другими подвыражениями с помощью оператора and Объединение сравнений, кроме выполненных с помощью оператора eq, с другими подвыражениями с помощью оператора or Выражения, в которых используются сочетания операторов and и or в конъюнктивной нормальной форме (КНФ) |
Дополнительные сведения об этих ограничениях, а также примеры см. в разделе "Устранение неполадок с фильтрами коллекции в Azure ИИ Поиск". Дополнительные сведения о том, почему эти ограничения существуют, см. в статье "Общие сведения о фильтрах коллекций" в службе "Поиск ИИ Azure".