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.
Not
Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.
Azure Yapay Zeka Arama'teki koleksiyon alanlarına filtre uygulamak için ve işleçlerini lambda ifadeleriyle anybirlikte kullanabilirsinizall. Lambda ifadesi, bir koleksiyonun her öğesine uygulanan bir alt filtredir.
Filtre ifadelerinin her özelliği bir lambda ifadesinin içinde kullanılamaz. Hangi özelliklerin kullanılabildiği, filtrelemek istediğiniz koleksiyon alanının veri türüne bağlıdır. Bu sınırlama, bu bağlamda desteklenmeyen bir lambda ifadesinde bir özellik kullanmaya çalışırsanız hataya neden olabilir. Koleksiyon alanları üzerinde karmaşık bir filtre yazmaya çalışırken bu tür hatalarla karşılaşırsanız, bu makale sorunu gidermenize yardımcı olur.
Yaygın koleksiyon filtresi hataları
Aşağıdaki tabloda, bir koleksiyon filtresi yürütmeye çalışırken karşılaşabileceğiniz hatalar listelanmaktadır. Bu hatalar, lambda ifadesinde desteklenmeyen filtre ifadelerinin bir özelliğini kullandığınızda oluşur. Her hata, hatadan kaçınmak için filtrenizi nasıl yeniden yazabileceğiniz konusunda bazı yönergeler sağlar. Tabloda, bu hatanın nasıl önlendiğini gösteren bu makalenin ilgili bölümünün bağlantısı da yer alır.
| Hata İletisi | Durum | Ayrıntılar |
|---|---|---|
İşlevin ismatch 's' aralık değişkenine bağlı parametresi yok. Lambda ifadelerinde yalnızca ilişkili alan başvuruları desteklenir ('any' veya 'all'). Ancak, işlevin lambda ifadesinin ismatch dışında olması için filtrenizi değiştirebilir ve yeniden deneyebilirsiniz. |
Lambda ifadesi içerisinde search.ismatch veya search.ismatchscoring kullanma |
Karmaşık koleksiyonları filtreleme kuralları |
| Geçersiz lambda ifadesi. Collection(Edm.String) türünde bir alan üzerinde yinelenen bir lambda ifadesinde tam tersinin beklendiği eşitlik veya eşitsizlik testi bulundu. 'any' için 'x eq y' veya 'search.in(...)' formunun ifadelerini kullanın. 'tümü' için 'x ne y', 'not (x eq y)' veya 'not search.in(...)' biçiminde ifadeler kullanın. | Türdeki bir alana filtre uygulama Collection(Edm.String) |
Dize koleksiyonlarını filtreleme kuralları |
Geçersiz lambda ifadesi. Karmaşık Boole ifadesinin desteklenmeyen bir biçimi bulundu. 'any' için, Ayrık Normal Form olarak da bilinen 'AND'lerin OR'leri' olan ifadeleri kullanın. Örneğin: (a and b) or (c and d) burada a, b, c ve d karşılaştırma veya eşitlik alt ifadeleridir. 'tümü' için, Konjonktif Normal Form olarak da bilinen 'OR'lerin AND'leri olan ifadeleri kullanın. Örneğin: (a or b) and (c or d) burada a, b, c ve d karşılaştırma veya eşitsizlik alt ifadeleridir. Karşılaştırma ifadelerine örnekler: 'x gt 5', 'x le 2'. Eşitlik ifadesi örneği: 'x eq 5'. Eşitsizlik ifadesi örneği: 'x ne 5'. |
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32) veya Collection(Edm.Int64) türündeki alanlarına göre filtreleme |
Karşılaştırılabilir koleksiyonları filtreleme kuralları |
| Geçersiz lambda ifadesi. Collection(Edm.GeographyPoint) türünde bir alan üzerinde yinelenen bir lambda ifadesinde desteklenmeyen geo.distance() veya geo.intersects() kullanımı bulundu. 'any' için geo.distance() öğesini 'lt' veya 'le' işleçlerini kullanarak karşılaştırdığınızdan ve geo.intersects() kullanımının olumsuz olmadığından emin olun. 'all' için geo.distance() değerini 'gt' veya 'ge' işleçlerini kullanarak karşılaştırdığınızdan ve geo.intersects() kullanımının olumsuz olduğundan emin olun. | Türdeki bir alana filtre uygulama Collection(Edm.GeographyPoint) |
GeographyPoint koleksiyonlarını filtreleme kuralları |
| Geçersiz lambda ifadesi. Collection(Edm.GeographyPoint) türündeki alanlar üzerinde yinelenen lambda ifadelerinde karmaşık Boole ifadeleri desteklenmez. 'any' için alt ifadeleri 'veya' ile birleştirin; 've' desteklenmez. 'all' için alt ifadeleri 've' ile birleştirin; 'veya' desteklenmez. | Türü Collection(Edm.String) veya Collection(Edm.GeographyPoint) olan alanlarda filtreleme |
Dize koleksiyonlarını filtreleme kuralları GeographyPoint koleksiyonlarını filtreleme kuralları |
| Geçersiz lambda ifadesi. Karşılaştırma işleci bulundu ('lt', 'le', 'gt' veya 'ge'). Collection(Edm.String) türündeki alanlar üzerinde yinelenen lambda ifadelerinde yalnızca eşitlik işleçlerine izin verilir. 'any' için 'x eq y' formunun ifadelerini kullanın. 'tüm' için 'x ≠ y' ya da 'not (x = y)' formundaki ifadelerini kullanın. | Türdeki bir alana filtre uygulama Collection(Edm.String) |
Dize koleksiyonlarını filtreleme kuralları |
Geçerli koleksiyon filtreleri nasıl yazılır
Geçerli koleksiyon filtreleri yazma kuralları her veri türü için farklıdır. Aşağıdaki bölümlerde, hangi filtre özelliklerinin desteklendiği ve hangilerinin desteklenmediği örnekleri gösterilerek kurallar açıklanmaktadır:
- Dize koleksiyonlarını filtreleme kuralları
- Boole koleksiyonlarını filtreleme kuralları
- GeographyPoint koleksiyonlarını filtreleme kuralları
- Karşılaştırılabilir koleksiyonları filtreleme kuralları
- Karmaşık koleksiyonları filtreleme kuralları
Dize koleksiyonlarını filtreleme kuralları
tr-TR: Dize koleksiyonları için lambda ifadelerinin içinde, kullanılabilecek yalnızca karşılaştırma işleçleri eq ve ne'dir.
Not
Azure Yapay Zeka Arama, lambda ifadesinin lt/le/gt/geiçinde veya dışında dize işleçlerini desteklemez.
any gövdesi yalnızca eşitlik için test yapabilirken, all gövdesi yalnızca eşitsizlik için test yapabilir.
Birden çok ifadeyi or bir öğesinin gövdesinde ve any aracılığıyla öğesinin andgövdesinde birleştirmek allde mümkündür.
search.in işlevi or ile eşitlik denetimlerini birleştirmeye eşdeğer olduğundan, aynı zamanda bir any gövdesinde kullanılması da mümkündür. Aksine, not search.in bir all gövdesinde izin verilir.
Örneğin, bu ifadelere izin verilir:
tags/any(t: t eq 'books')tags/any(t: search.in(t, 'books, games, toys'))tags/all(t: t ne 'books')tags/all(t: not (t eq 'books'))tags/all(t: not search.in(t, 'books, games, toys'))tags/any(t: t eq 'books' or t eq 'games')tags/all(t: t ne 'books' and not (t eq 'games'))
Bu ifadelere izin verilmiyor:
tags/any(t: t ne 'books')tags/any(t: not search.in(t, 'books, games, toys'))tags/all(t: t eq 'books')tags/all(t: search.in(t, 'books, games, toys'))tags/any(t: t eq 'books' and t ne 'games')tags/all(t: t ne 'books' or not (t eq 'games'))
Boole koleksiyonlarını filtreleme kuralları
Türü Edm.Boolean yalnızca eq ve ne işleçlerini destekler. Bu nedenle, her zaman tautolojilere veya çelişkilere yol açacağı için aynı aralık değişkenini denetleyen bu tür yan tümcelerin birleştirilmesine and/or izin vermek çok anlamlı değildir.
Boole koleksiyonlarında izin verilen bazı filtre örnekleri aşağıda verilmiştir:
flags/any(f: f)flags/all(f: f)flags/any(f: f eq true)flags/any(f: f ne true)flags/all(f: not f)flags/all(f: not (f eq true))
Dize koleksiyonlarından farklı olarak, Boole koleksiyonlarının hangi işlecin hangi lambda ifade türünde kullanılabileceğinin sınırları yoktur. Hem eq hem de ne, any veya all gövdesinde kullanılabilir.
Boole koleksiyonları için aşağıdaki gibi ifadelere izin verilmez:
flags/any(f: f or not f)flags/any(f: f or f)flags/all(f: f and not f)flags/all(f: f and f eq true)
GeographyPoint koleksiyonlarını filtreleme kuralları
Koleksiyondaki tür Edm.GeographyPoint değerleri doğrudan birbiriyle karşılaştırılamaz. Bunun yerine, geo.distance ve geo.intersects işlevlerine parametre olarak kullanılmalıdır. İşlev, geo.distance , veya ltkarşılaştırma işleçlerinden legtgebiri kullanılarak bir uzaklık değeriyle karşılaştırılmalıdır. Bu kurallar, koleksiyon olmayan Edm.GeographyPoint alanları için de geçerlidir.
Dize koleksiyonları gibi koleksiyonlar da Edm.GeographyPoint coğrafi uzamsal işlevlerin farklı lambda ifade türlerinde nasıl kullanılıp birleştirilebileceğine ilişkin bazı kurallara sahiptir:
- İşlevle
geo.distancekullanabileceğiniz karşılaştırma işleçleri lambda ifadesinin türüne bağlıdır. içinanyyalnızcaltveyalekullanabilirsiniz. içinallyalnızcagtveyagekullanabilirsiniz. içerengeo.distanceifadeleri olumsuzlayabilirsiniz, ancak karşılaştırma işlecini değiştirmeniz gerekir (geo.distance(...) lt xolurnot (geo.distance(...) ge x)vegeo.distance(...) le xolurnot (geo.distance(...) gt x)). -
allgövdesinde,geo.intersectsişlevinin olumsuzlanması gerekir. Buna karşılık, birany'nin gövdesinde,geo.intersectsişlevinin olumsuzlanmaması gerekir. - Bir
any'nin gövdesinde, coğrafi-uzamsal ifadelerorkullanılarak birleştirilebilir. Birallgövdesinde, bu tür ifadelerandkullanılarak birleştirilebilir.
Yukarıdaki sınırlamalar, dize koleksiyonlarındaki eşitlik/eşitsizlik sınırlaması gibi benzer nedenlerle mevcuttur. Bu nedenlere daha ayrıntılı bir bakış için Azure Yapay Zeka Arama'te OData koleksiyonu filtrelerini anlama bölümüne bakın.
İzin verilen koleksiyonlardaki Edm.GeographyPoint filtrelere bazı örnekler aşağıda verilmiştir:
locations/any(l: geo.distance(l, geography'POINT(-122 49)') lt 10)locations/any(l: not (geo.distance(l, geography'POINT(-122 49)') ge 10) or geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.distance(l, geography'POINT(-122 49)') ge 10 and not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Koleksiyonlar için Edm.GeographyPoint aşağıdaki gibi ifadelere izin verilmez:
locations/any(l: l eq geography'POINT(-122 49)')locations/any(l: not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/any(l: geo.distance(l, geography'POINT(-122 49)') gt 10)locations/all(l: geo.distance(l, geography'POINT(-122 49)') lt 10)locations/any(l: geo.distance(l, geography'POINT(-122 49)') lt 10 and geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.distance(l, geography'POINT(-122 49)') le 10 or not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Karşılaştırılabilir koleksiyonları filtreleme kuralları
Bu bölüm aşağıdaki tüm veri türleri için geçerlidir:
Collection(Edm.DateTimeOffset)Collection(Edm.Double)Collection(Edm.Int32)Collection(Edm.Int64)
Edm.Int32 ve Edm.DateTimeOffset türleri, karşılaştırma işleçlerinin altısını da destekler: eq, ne, lt, le, gt, ve ge. Bu tür koleksiyonlar üzerindeki Lambda ifadeleri, bu işleçlerden herhangi birini kullanarak basit ifadeler içerebilir. Bu, hem hem anyde all için geçerlidir. Örneğin, bu filtrelere izin verilir:
ratings/any(r: r ne 5)dates/any(d: d gt 2017-08-24T00:00:00Z)not margins/all(m: m eq 3.5)
Ancak, bu tür karşılaştırma ifadelerinin bir lambda ifadesi içinde daha karmaşık ifadeler halinde nasıl birleştirilebileceğiyle ilgili sınırlamalar vardır:
- için
anykurallar:Basit eşitsizlik ifadeleri diğer ifadelerle kullanışlı bir şekilde birleştirilemiyor. Örneğin, bu ifadeye izin verilir:
ratings/any(r: r ne 5)
ancak bu ifade şu değildir:
ratings/any(r: r ne 5 and r gt 2)
ve bu ifadeye izin verilse de koşullar çakıştığı için kullanışlı değildir:
ratings/any(r: r ne 5 or r gt 7)
eq,lt,le,gtveyageiçeren basit karşılaştırma ifadeleri,and/orile birleştirilebilir. Örneğin:ratings/any(r: r gt 2 and r le 5)ratings/any(r: r le 5 or r gt 7)
bağlaçlarla
andile birleştirilen karşılaştırma ifadeleri,orkullanılarak daha fazla birleştirilebilir. Bu form Boole mantığında "Ayrık Normal Form" (DNF) olarak bilinir. Örneğin:ratings/any(r: (r gt 2 and r le 5) or (r gt 7 and r lt 10))
- için
allkurallar:Basit eşitlik ifadeleri diğer ifadelerle kullanışlı bir şekilde birleştirilemiyor. Örneğin, bu ifadeye izin verilir:
ratings/all(r: r eq 5)
ancak bu ifade şu değildir:
ratings/all(r: r eq 5 or r le 2)
ve bu ifadeye izin verilse de koşullar çakıştığı için kullanışlı değildir:
ratings/all(r: r eq 5 and r le 7)
ne,lt,le,gtveyageiçeren basit karşılaştırma ifadeleri,and/orile birleştirilebilir. Örneğin:ratings/all(r: r gt 2 and r le 5)ratings/all(r: r le 5 or r gt 7)
Karşılaştırma ifadeleri,
or(disjunctions) kullanılarak birleştirildiğinde,andile daha fazla birleştirilebilir. Bu form Boole mantığında "Konjonktif Normal Form" (CNF) olarak bilinir. Örneğin:ratings/all(r: (r le 2 or r gt 5) and (r lt 7 or r ge 10))
Karmaşık koleksiyonları filtreleme kuralları
Karmaşık koleksiyonlar üzerindeki Lambda ifadeleri, ilkel tür koleksiyonlarına kıyasla lambda ifadelerinden çok daha esnek bir söz dizimini destekler. Böyle bir lambda ifadesinin içinde herhangi bir filtre yapısını kullanabilirsiniz ve yalnızca iki özel durum dışında kullanabilirsiniz.
İlk olarak, işlevleri search.ismatch ve search.ismatchscoring lambda ifadeleri içinde desteklenmez. Daha fazla bilgi için bkz Azure Yapay Zeka Arama'te OData koleksiyon filtrelerini anlama.
İkincisi, aralık değişkenine (serbest değişkenler olarak adlandırılır) bağlı olmayan alanlara başvuruda bulunmak yasaktır. Örneğin, aşağıdaki iki eşdeğer OData filtre ifadesini göz önünde bulundurun:
stores/any(s: s/amenities/any(a: a eq 'parking')) and details/margin gt 0.5stores/any(s: s/amenities/any(a: a eq 'parking' and details/margin gt 0.5))
İlk ifadeye izin verilirken, ikinci form aralık değişkenine details/marginbağlı olmadığından reddedilirs.
Bu kural, dış kapsamda bağlı değişkenleri olan ifadelere de genişletir. Bu tür değişkenler, göründükleri kapsam bakımından serbesttir. Örneğin, ilk ifadeye izin verilirken ikinci eşdeğer ifadeye izin verilmez çünkü s/name aralık değişkeninin akapsamına göre serbesttir:
stores/any(s: s/amenities/any(a: a eq 'parking') and s/name ne 'Flagship')stores/any(s: s/amenities/any(a: a eq 'parking' and s/name ne 'Flagship'))
Lambda ifadelerinin yalnızca ilişkili değişkenler içermesi için filtreler oluşturmak her zaman mümkün olduğundan bu sınırlama uygulamada sorun oluşturmamalıdır.
Koleksiyon filtresi kuralları için ipuçları kartı
Aşağıdaki tabloda, her koleksiyon veri türü için geçerli filtreler oluşturma kuralları özetlenir.
| Veri türü | ile lambda ifadelerinde izin verilen özellikler any |
ile lambda ifadelerinde izin verilen özellikler all |
|---|---|---|
Collection(Edm.ComplexType) |
search.ismatch ve search.ismatchscoring dışındaki her şey |
Aynısı |
Collection(Edm.String) |
Karşılaştırmalar eq veya search.in ile Alt ifadeleri or ile birleştirme |
Karşılaştırmalar ne veya not search.in() ile Alt ifadeleri and ile birleştirme |
Collection(Edm.Boolean) |
Karşılaştırmalar eq veya ne ile |
Aynısı |
Collection(Edm.GeographyPoint) |
geo.distance ve lt veya le kullanma geo.intersects Alt ifadeleri or ile birleştirme |
geo.distance ve gt veya ge kullanma not geo.intersects(...) Alt ifadeleri and ile birleştirme |
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32), Collection(Edm.Int64) |
Karşılaştırmalareq, ne, lt, gt, le veya ge kullanan Karşılaştırmaları or kullanarak diğer alt ifadelerle birleştirmek ne'yi hariç tutarak and kullanarak diğer alt ifadelerle karşılaştırmaları birleştirme Disjunctive Normal Form (DNF) içinde ve and birleşimlerini kullanan ifadeler or |
Karşılaştırmalareq, ne, lt, gt, le veya ge kullanan Karşılaştırmaları and kullanarak diğer alt ifadelerle birleştirmek eq'yi hariç tutarak or kullanarak diğer alt ifadelerle karşılaştırmaları birleştirme Bağlayıcı Normal Form (CNF) içinde and ve or kombinasyonlarını kullanan ifadeler |
Her durum için geçerli filtreler oluşturma örnekleri görmek için Geçerli koleksiyon filtreleri nasıl yazılır konusuna bakın.
Filtreleri sık sık yazıyorsanız ve temel ilkelerden gelen kuralları anlamak, onları ezberlemekten daha faydalı olacaksa, Azure Yapay Zeka Arama'teki OData koleksiyon filtrelerini anlama konusuna bakın.