Verilerde , ve için OData $filter $orderby $select diline genel Azure Bilişsel Arama
Azure Bilişsel Arama, $filter ,$orderby ve $select ifadeleri için OData ifade söz dizimlerinin bir alt kümesini destekler. Filtre ifadeleri sorgu ayrıştırma sırasında değerlendirilir, arama belirli alanlara kısıtlanmış veya dizin taramaları sırasında kullanılan eşleşme ölçütleri eklenmiş olur. Sıralama göre ifadeleri, döndürülen belgeleri sıralamak için bir sonuç kümesi üzerinde işlem sonrası adım olarak uygulanır. Seçim ifadeleri, sonuç kümesine hangi belge alanlarının dahil olduğunu belirler. Bu ifadelerin söz dizimi, arama parametresinde kullanılan basit veya tam sorgu söz dizimlerinden farklıdır, ancak başvuru alanlarına yönelik söz dizimlerinde bazı çakışmalar vardır.
Bu makalede filtrelerde, sıralamada ve seçim ifadelerinde kullanılan OData ifade diline genel bir bakış verilmektedir. Dil, en temel öğelerden başlayarak ve bunları temel alan "alttan" olarak sunulmaktadır. Her parametre için üst düzey söz dizimi ayrı bir makalede açıklanmıştır:
OData ifadeleri basitten son derece karmaşıka kadar geniş bir aralıktadır, ancak hepsi ortak öğeleri paylaşır. OData ifadesinin en temel parçaları Azure Bilişsel Arama:
- Dizininizin belirli alanlarına başvuran alan yolları.
- Sabitler: Belirli bir veri türünün değişmez değerleridir.
Not
Azure Bilişsel Arama OData standardını birkaç şekilde farklıdır. Azure Bilişsel Arama'da bir alan olarak Azure Bilişsel Arama OData'daki bir özellik olarak, benzer şekilde alan yolu ve özellik yolu olarak da çağrılır. OData'da Azure Bilişsel Arama içeren bir dizin, varlık içeren bir varlık kümesi olarak daha genel olarak adlandırılır. Bu Azure Bilişsel Arama tüm çalışma terminolojisi kullanılır.
Alan yolları
Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu),alan yollarının dil bilgisini tanımlar.
field_path ::= identifier('/'identifier)*
identifier ::= [a-zA-Z_][a-zA-Z_0-9]*
Etkileşimli söz dizimi diyagramı da kullanılabilir:
Not
Tam EBNF için OData Azure Bilişsel Arama söz dizimi başvurusuna bakın.
Alan yolu, eğik çizgiyle ayrılmış bir veya daha fazla tanımlayıcıdan oluşur. Her tanımlayıcı bir ASCII harfi veya alt çizgi ile başlaması gereken ve yalnızca ASCII harf, rakam veya alt çizgi içeren bir karakter dizisidir. Harfler büyük veya küçük harf olabilir.
Tanımlayıcı, bir alanın adına veya bir filtrede koleksiyon ifadesi ( veya ) bağlamındaki bir any aralık all değişkenine başvurur. Aralık değişkeni, koleksiyonun geçerli öğesini temsil eden bir döngü değişkenine benzer. Karmaşık koleksiyonlar için bu değişken bir nesneyi temsil eder. Bu nedenle, değişkenin alt alanlarına başvurmak için alan yollarını kullanabilirsiniz. Bu, birçok programlama dilindeki nokta notasyonuna benzer.
Alan yollarının örnekleri aşağıdaki tabloda gösterilmiştir:
| Alan yolu | Description |
|---|---|
HotelName |
Dizinin üst düzey alanını ifade eder |
Address/City |
Dizinde City karmaşık bir alanın alt alanına başvurur; Address bu örnekte Edm.ComplexType türündedir |
Rooms/Type |
Dizinde Type karmaşık bir koleksiyon alanı alt alanına başvurur; Rooms bu örnekte Collection(Edm.ComplexType) türündedir |
Stores/Address/Country |
Dizinde karmaşık bir koleksiyon alanı alt alanın alt alanını ifade eder; türündedir ve bu Country Address örnekte Stores Collection(Edm.ComplexType) Address Edm.ComplexType türündedir |
room/Type |
Filtre Type ifadesinde olduğu gibi room aralık değişkeninin alt alanına başvurur Rooms/any(room: room/Type eq 'deluxe') |
store/Address/Country |
Aralık Country değişkeninin alt Address alanı olan filtre store ifadesinde olduğu gibi alt alanını ifade eder Stores/any(store: store/Address/Country eq 'Canada') |
Bir alan yolunun anlamı bağlama göre farklılık gösterir. Filtrelerde, bir alan yolu geçerli belgede bir alanın tek bir örneğinin değerine başvurur. tam Lucenesöz dizimsinde $orderby, $select veya alanlı arama gibi diğer bağlamlarda, bir alan yolu alanın kendisine başvurur. Bu farkın, filtrelerde alan yollarını kullanmanın bazı sonuçları vardır.
alan yolunu göz önünde Address/City bulundurarak. Filtrede bu, geçerli belge için "San Francisco" gibi tek bir şehri ifade eder. Buna karşılık, birçok oda için alt alanı ifade eder (birinci oda için "standart", ikinci oda için Rooms/Type Type "lüks" vb.). Rooms/Typealt alanın tek bir örneğine başvurmayarak doğrudan Type filtrede kullanılamaz. Bunun yerine, oda türüne göre filtrelemek için aşağıdaki gibi bir aralık değişkenine sahip bir lambda ifadesi kullanabilirsiniz:
Rooms/any(room: room/Type eq 'deluxe')
Bu örnekte, alan yolunda room range değişkeni room/Type görünür. Bu room/Type şekilde, geçerli belgede geçerli oda türünü ifade eder. Bu, alt alanın Type tek bir örneğidir, bu nedenle doğrudan filtrede kullanılabilir.
Alan yollarını kullanma
Alan yolları, rest API'lerinin birçok Azure Bilişsel Arama kullanılır. Aşağıdaki tabloda, kullanılamaları gereken tüm yerlerin yanı sıra kullanımlarıyla ilgili kısıtlamalar liste almaktadır:
| API | Parametre adı | Kısıtlamalar |
|---|---|---|
| Dizini Oluşturma veya Güncelleştirme | suggesters/sourceFields |
Hiçbiri |
| Dizini Oluşturma veya Güncelleştirme | scoringProfiles/text/weights |
Yalnızca aranabilir alanlara başvurulabilir |
| Dizini Oluşturma veya Güncelleştirme | scoringProfiles/functions/fieldName |
Yalnızca filtrelenebilir alanlara başvurabilir |
| Ara | searcholduğunda queryType``full |
Yalnızca aranabilir alanlara başvurulabilir |
| Ara | facet |
Yalnızca facetable alanlarına başvurabilirsiniz |
| Ara | highlight |
Yalnızca aranabilir alanlara başvurulabilir |
| Ara | searchFields |
Yalnızca aranabilir alanlara başvurulabilir |
| Önerin ve Otomatik Tamamlama | searchFields |
Yalnızca bir önerinin parçası olan alanlara başvurabilirsiniz |
| Arama, Önerive Otomatik Tamamlama | $filter |
Yalnızca filtrelenebilir alanlara başvurabilir |
| Arama ve Öneri | $orderby |
Yalnızca sıralanabilir alanlara başvurulabilir |
| Arama, Önerive Arama | $select |
Yalnızca alınabilir alanlara başvurur |
Sabitler
OData'daki sabitler, verili bir Varlık Veri Modeli (EDM) türünde sabit değerlerdir. Desteklenen veri türleri listesi için bkz. Desteklenen veri türleri Azure Bilişsel Arama. Koleksiyon türlerinin sabitleri desteklenmiyor.
Aşağıdaki tabloda, veri türleri tarafından desteklenen her bir veri türü için sabitlerin örnekleri Azure Bilişsel Arama:
| Veri türü | Örnek sabitler |
|---|---|
Edm.Boolean |
true, false |
Edm.DateTimeOffset |
2019-05-06T12:30:05.451Z |
Edm.Double |
3.14159, -1.2e7, NaN, INF, -INF |
Edm.GeographyPoint |
geography'POINT(-122.131577 47.678581)' |
Edm.GeographyPolygon |
geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))' |
Edm.Int32 |
123, -456 |
Edm.Int64 |
283032927235 |
Edm.String |
'hello' |
Dize sabitleri içinde özel karakterleri kaçış
OData'daki dize sabitleri tek tırnak içine alınarak ayrılmıştır. Tek tırnak içeren bir dize sabiti içeren bir sorgu oluşturmalı, ekli tırnakları iki katına vararak çıkış olarak kullanabilirsiniz.
Örneğin, "Alice'in otomobili" gibi biçimlendirilmemiş kesme işaretine sahip bir tümcecik, OData'da dize sabiti olarak temsil edilen bir 'Alice''s car' ifadedir.
Önemli
Filtreleri program aracılığıyla oluşturmak için kullanıcı girişlerinden gelen dize sabitlerinden kaçış dizesi sabitlerini unutmamanız önemlidir. Bu, özellikle de güvenlik kırpması uygulamak içinfiltreler kullanılırken ekleme saldırıları olasılığını azaltmaktır.
Sabitler söz dizimi
Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu),yukarıdaki tabloda gösterilen sabitlerin çoğunun dil bilgisini tanımlar. Coğrafi uzamsal türlerin dil bilgisi, OData coğrafi uzamsal işlevlerinde Azure Bilişsel Arama.
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 ::= 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'
Etkileşimli bir sözdizimi diyagramı da kullanılabilir:
Not
Tüm EBNF için bkz. Azure bilişsel arama Için OData ifadesi söz dizimi başvurusu .
Alan yollarından ve sabitlerden ifadeler oluşturma
Alan yolları ve sabitler, bir OData ifadesinin en temel kısmıdır, ancak bunlar zaten tam ifadelerdir. Aslında, Azure Bilişsel Arama $Select parametresi Nothing, ancak alan yollarının virgülle ayrılmış bir listesidir ve $OrderBy $Select kıyasla daha karmaşık değildir. Dizininizdeki türünde bir alanınız varsa Edm.Boolean , bu alanın yolu ancak hiçbir şey olmayan bir filtre de yazabilirsiniz. Sabitler true ve false aynı şekilde geçerli filtrelerdir.
Ancak, çoğu zaman birden fazla alana ve sabitine başvuran daha karmaşık deyimler gerekecektir. Bu ifadeler parametreye bağlı olarak farklı şekillerde oluşturulmuştur.
Aşağıdaki EBNF (genişletilmiş Backus-Naur formu) $Filter, $OrderBy ve $Select parametrelerine yönelik dilbilgisini tanımlar. Bunlar alan yollarına ve sabitlere başvuran daha basit ifadelerden oluşturulmuştur:
filter_expression ::= boolean_expression
order_by_expression ::= order_by_clause(',' order_by_clause)*
select_expression ::= '*' | field_path(',' field_path)*
Etkileşimli bir sözdizimi diyagramı da kullanılabilir:
Not
Tüm EBNF için bkz. Azure bilişsel arama Için OData ifadesi söz dizimi başvurusu .
$OrderBy ve $Select parametreleri, daha basit ifadelerin virgülle ayrılmış listeleridir. $Filter parametresi, daha basit alt ifadelerden oluşan bir Boolean ifadedir. Bu alt ifadeler and ,, or not ve gibi mantıksal işleçler kullanılarak birleştirilir,, ve gibi karşılaştırma işleçleri ve any ve all gibi koleksiyon işleçleri. eq lt gt
$Filter, $OrderBy ve $Select parametreleri aşağıdaki makalelerde daha ayrıntılı bir şekilde araştırılabilir:
- Azure Bilişsel Arama 'de OData $filter söz dizimi
- Azure Bilişsel Arama 'de OData $orderby söz dizimi
- Azure Bilişsel Arama 'de OData $select söz dizimi