Azure AI Search'te OData karşılaştırma işleçleri - eq
, ne
, gt
, lt
, , ge
ve le
Azure AI Search'teki OData filtre ifadesindeki en temel işlem, bir alanı belirli bir değerle karşılaştırmaktır. İki tür karşılaştırma mümkündür: eşitlik karşılaştırması ve aralık karşılaştırması. Bir alanı sabit bir değerle karşılaştırmak için aşağıdaki işleçleri kullanabilirsiniz:
Eşitlik işleçleri:
eq
: Alanın sabit bir değere eşit olup olmadığını test etmene
: Alanın sabit değere eşit olup olmadığını test etme
Aralık işleçleri:
gt
: Alanın sabit bir değerden büyük olup olmadığını test edinlt
: Alanın sabit değerden küçük olup olmadığını test edinge
: Alanın sabit bir değerden büyük veya buna eşit olup olmadığını test edinle
: Alanın sabit bir değerden küçük mü yoksa eşit mi olduğunu test edin
Bir alanın belirli bir değer aralığında olup olmadığını test etmek için mantıksal işleçlerle birlikte aralık işleçlerini kullanabilirsiniz. Bu makalenin devamında yer alan örneklere bakın.
Not
İsterseniz, sabit değeri işlecin sol tarafına, alan adını da sağ tarafa yerleştirebilirsiniz. Aralık işleçleri için karşılaştırmanın anlamı tersine çevrilir. Örneğin, sabit değer sol taraftaysa, gt
sabit değerin alandan büyük olup olmadığını test eder. Karşılaştırma işleçlerini, gibi geo.distance
bir işlevin sonucunu bir değerle karşılaştırmak için de kullanabilirsiniz. gibi search.ismatch
Boole işlevleri için sonucu true
veya false
ile karşılaştırmak isteğe bağlıdır.
Sözdizimi
Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu), karşılaştırma işleçlerini kullanan bir OData ifadesinin dil bilgisini tanımlar.
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'
Etkileşimli söz dizimi diyagramı da kullanılabilir:
Not
EbNF'nin tamamı için bkz . Azure AI Search için OData ifade söz dizimi başvurusu.
İki karşılaştırma ifadesi biçimi vardır. Aralarındaki tek fark, sabitin işlecin sol tarafında mı yoksa sağ tarafında mı göründüğüdür. İşlecin diğer tarafındaki ifade bir değişken veya işlev çağrısı olmalıdır. Değişken bir alan adı veya lambda ifadesi söz konusu olduğunda bir aralık değişkeni olabilir.
Karşılaştırmalar için veri türleri
Karşılaştırma işlecinin her iki tarafındaki veri türleri uyumlu olmalıdır. Örneğin, sol taraf türünde Edm.DateTimeOffset
bir alansa, sağ taraf bir tarih-saat sabiti olmalıdır. Sayısal veri türleri daha esnek olur. Aşağıdaki tabloda açıklandığı gibi, herhangi bir sayısal türün değişkenlerini ve işlevlerini diğer herhangi bir sayısal türün sabitleriyle birkaç sınırlamayla karşılaştırabilirsiniz.
Değişken veya işlev türü | Sabit değer türü | Sınırlamalar |
---|---|---|
Edm.Double |
Edm.Double |
Karşılaştırma için özel kurallara tabidir NaN |
Edm.Double |
Edm.Int64 |
Sabit değerine dönüştürülür Edm.Double ve bu da büyük büyüklüğe sahip değerler için duyarlık kaybına neden oluyor |
Edm.Double |
Edm.Int32 |
yok |
Edm.Int64 |
Edm.Double |
, -INF veya INF karşılaştırmalarına NaN izin verilmiyor |
Edm.Int64 |
Edm.Int64 |
yok |
Edm.Int64 |
Edm.Int32 |
Karşılaştırmadan önce sabit olarak dönüştürülür Edm.Int64 |
Edm.Int32 |
Edm.Double |
, -INF veya INF karşılaştırmalarına NaN izin verilmiyor |
Edm.Int32 |
Edm.Int64 |
yok |
Edm.Int32 |
Edm.Int32 |
yok |
türündeki bir alanı Edm.Int64
NaN
ile karşılaştırmak gibi izin verilmeyen karşılaştırmalar için Azure AI Search REST API'sinde "HTTP 400: Hatalı İstek" hatası döndürülecektir.
Önemli
Sayısal tür karşılaştırmaları esnek olsa da, sabit değerin karşılaştırıldığı değişken veya işlevle aynı veri türünde olması için filtrelerde karşılaştırmalar yazmanızı kesinlikle öneririz. Bu özellikle kayan nokta ve tamsayı değerlerini karıştırırken önemlidir; burada duyarlık kaybı olan örtük dönüştürmeler mümkündür.
ve için null
özel durumlar NaN
Karşılaştırma işleçlerini kullanırken, Azure AI Search'teki koleksiyon dışı tüm alanların potansiyel olarak olabileceğini null
unutmayın. Aşağıdaki tabloda, her iki tarafın da olabileceği bir karşılaştırma ifadesi için tüm olası sonuçlar gösterilmektedir null
:
Operatör | Yalnızca alan veya değişken olduğunda sonuç null |
Yalnızca sabit olduğunda sonuç null |
Hem alan ya da değişken hem de sabit olduğunda sonuç null |
---|---|---|---|
gt |
false |
HTTP 400: Hatalı İstek hatası | HTTP 400: Hatalı İstek hatası |
lt |
false |
HTTP 400: Hatalı İstek hatası | HTTP 400: Hatalı İstek hatası |
ge |
false |
HTTP 400: Hatalı İstek hatası | HTTP 400: Hatalı İstek hatası |
le |
false |
HTTP 400: Hatalı İstek hatası | HTTP 400: Hatalı İstek hatası |
eq |
false |
false |
true |
ne |
true |
true |
false |
Özetle, null
yalnızca kendisine eşittir ve diğer herhangi bir değerden küçük veya daha büyük değildir.
Dizininizde tür Edm.Double
alanları varsa ve bu alanlara değer yüklerseniz NaN
, filtreler yazarken bunu hesaba katmanız gerekir. Azure AI Search, değerleri işlemek NaN
için IEEE 754 standardını uygular ve aşağıdaki tabloda gösterildiği gibi bu tür değerlerle yapılan karşılaştırmalar belirgin olmayan sonuçlar üretir.
Operatör | En az bir işlenen olduğunda sonuç NaN |
---|---|
gt |
false |
lt |
false |
ge |
false |
le |
false |
eq |
false |
ne |
true |
Özetle, NaN
kendisi de dahil olmak üzere herhangi bir değere eşit değildir.
Coğrafi uzamsal verileri karşılaştırma
Türündeki Edm.GeographyPoint
bir alanı sabit değerle doğrudan karşılaştıramazsınız, ancak işlevini kullanabilirsiniz geo.distance
. Bu işlev türünde Edm.Double
bir değer döndürür, böylece sabit coğrafi uzamsal koordinatlardan uzaklık temelinde filtrelemek için sayısal sabitle karşılaştırabilirsiniz. Aşağıdaki örneklere bakın.
Dize verilerini karşılaştırma
Dizeler ve ne
işleçleri kullanılarak eq
tam eşleşmeler için filtrelerde karşılaştırılabilir. Bu karşılaştırmalar büyük/küçük harfe duyarlıdır.
Örnekler
Alanın 3 ile 5 (dahil) arasında olduğu Rating
belgeleri eşleştirin:
Rating ge 3 and Rating le 5
Alanın verilen enlem ve boylamdan 2 kilometreden az olduğu Location
belgeleri eşleştirin:
geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0
Alanın 1 Ocak 2015 gece yarısı UTC'den büyük veya buna eşit olduğu LastRenovationDate
belgeleri eşleştirin:
LastRenovationDate ge 2015-01-01T00:00:00.000Z
Alanın olmadığı Details/Sku
null
belgeleri eşleştir:
Details/Sku ne null
En az bir odanın "Deluxe Oda" türüne sahip olduğu ve alanın dizesinin Rooms/Type
filtreyle tam olarak eşleştiği oteller için belgeleri eşleştirin:
Rooms/any(room: room/Type eq 'Deluxe Room')