Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Yapay Zeka Arama, API genelinde parametre olarak OData ifadelerini kullanır. En yaygın olarak $orderby ve $filter parametreleri için OData ifadeleri kullanılır. Bu ifadeler birden çok yan tümce, işlev ve işleç içeren karmaşık olabilir. Ancak özellik yolları gibi basit OData ifadeleri bile Azure Yapay Zeka Arama REST API'sinin birçok bölümünde kullanılır. Örneğin, yol ifadeleri api'de her yerdeki karmaşık alanların alt alanlarına başvurmak için kullanılır. Örneğin, bir öneride alt alanları listelerken, puanlama işlevinde, $select parametrede ve hatta Lucene sorgularında alanlı arama yaparken.
Bu makalede, resmi dil bilgisi kullanan tüm bu OData ifade biçimleri açıklanmaktadır. Dil bilgisini görsel olarak keşfetmeye yardımcı olacak etkileşimli bir diyagram da vardır.
Resmi dil bilgisi
EBNF (Genişletilmiş Backus-Naur Formu) dil bilgisi kullanarak Azure Yapay Zeka Arama tarafından desteklenen OData dilinin alt kümesini açıklayabiliriz. Kurallar, en karmaşık ifadelerden başlayarak ve bunları daha ilkel ifadelere bölerek "yukarıdan aşağıya" listelenir. En üstte, Azure Yapay Zeka Arama REST API'sinin belirli parametrelerine karşılık gelen dil bilgisi kuralları yer almaktadır:
-
$filter,filter_expressionkuralı tarafından tanımlanır. -
$orderby,order_by_expressionkuralı tarafından tanımlanır. -
$select,select_expressionkuralı tarafından tanımlanır. - Kural tarafından
field_pathtanımlanan alan yolları. Alan yolları API'nin her alanında kullanılır. Bir dizinin üst düzey alanlarına veya bir veya daha fazla karmaşık alan öncülüne sahip alt alanlara başvurabilir.
EBNF' nin ardından, dil bilgisini ve kuralları arasındaki ilişkileri etkileşimli olarak keşfetmenizi sağlayan göz atılabilir bir söz dizimi diyagramıdır .
/* Top-level rules */
filter_expression ::= boolean_expression
order_by_expression ::= order_by_clause(',' order_by_clause)*
select_expression ::= '*' | field_path(',' field_path)*
field_path ::= identifier('/'identifier)*
/* Shared base rules */
identifier ::= [a-zA-Z_][a-zA-Z_0-9]*
/* Rules for $orderby */
order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?
sortable_function ::= geo_distance_call | 'search.score()'
/* Rules for $filter */
boolean_expression ::=
collection_filter_expression
| logical_expression
| comparison_expression
| boolean_literal
| boolean_function_call
| '(' boolean_expression ')'
| variable
/* This can be a range variable in the case of a lambda, or a field path. */
variable ::= identifier | field_path
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
logical_expression ::=
boolean_expression ('and' | 'or') boolean_expression
| 'not' boolean_expression
comparison_expression ::=
variable_or_function comparison_operator constant |
constant comparison_operator variable_or_function
variable_or_function ::= variable | function_call
comparison_operator ::= 'gt' | 'lt' | 'ge' | 'le' | 'eq' | 'ne'
/* Rules for constants and literals */
constant ::=
string_literal
| date_time_offset_literal
| integer_literal
| float_literal
| boolean_literal
| 'null'
string_literal ::= "'"([^'] | "''")*"'"
date_time_offset_literal ::= date_part'T'time_part time_zone
date_part ::= year'-'month'-'day
time_part ::= hour':'minute(':'second('.'fractional_seconds)?)?
zero_to_fifty_nine ::= [0-5]digit
digit ::= [0-9]
year ::= digit digit digit digit
month ::= '0'[1-9] | '1'[0-2]
day ::= '0'[1-9] | [1-2]digit | '3'[0-1]
hour ::= [0-1]digit | '2'[0-3]
minute ::= zero_to_fifty_nine
second ::= zero_to_fifty_nine
fractional_seconds ::= integer_literal
time_zone ::= 'Z' | sign hour':'minute
sign ::= '+' | '-'
/* In practice integer literals are limited in length to the precision of
the corresponding EDM data type. */
integer_literal ::= sign? digit+
float_literal ::=
sign? whole_part fractional_part? exponent?
| 'NaN'
| '-INF'
| 'INF'
whole_part ::= integer_literal
fractional_part ::= '.'integer_literal
exponent ::= 'e' sign? integer_literal
boolean_literal ::= 'true' | 'false'
/* Rules for functions */
function_call ::=
geo_distance_call |
boolean_function_call
geo_distance_call ::=
'geo.distance(' variable ',' geo_point ')'
| 'geo.distance(' geo_point ',' variable ')'
geo_point ::= "geography'POINT(" lon_lat ")'"
lon_lat ::= float_literal ' ' float_literal
boolean_function_call ::=
geo_intersects_call |
search_in_call |
search_is_match_call
geo_intersects_call ::=
'geo.intersects(' variable ',' geo_polygon ')'
/* You need at least four points to form a polygon, where the first and
last points are the same. */
geo_polygon ::=
"geography'POLYGON((" lon_lat ',' lon_lat ',' lon_lat ',' lon_lat_list "))'"
lon_lat_list ::= lon_lat(',' lon_lat)*
search_in_call ::=
'search.in(' variable ',' string_literal(',' string_literal)? ')'
/* Note that it is illegal to call search.ismatch or search.ismatchscoring
from inside a lambda expression. */
search_is_match_call ::=
'search.ismatch'('scoring')?'(' search_is_match_parameters ')'
search_is_match_parameters ::=
string_literal(',' string_literal(',' query_type ',' search_mode)?)?
query_type ::= "'full'" | "'simple'"
search_mode ::= "'any'" | "'all'"
Söz dizimi diyagramı
Azure Yapay Zeka Arama tarafından desteklenen OData dil dil bilgisini görsel olarak keşfetmek için etkileşimli söz dizimi diyagramını deneyin: