Azure AI Search'te OData karşılaştırma işleçleri - eq, ne, gt, lt, , geve 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 etme
  • ne: 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 edin
  • lt: Alanın sabit değerden küçük olup olmadığını test edin
  • ge: Alanın sabit bir değerden büyük veya buna eşit olup olmadığını test edin
  • le: 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.

Dekont

İ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.distancebir işlevin sonucunu bir değerle karşılaştırmak için de kullanabilirsiniz. gibi search.ismatchBoole 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:

Dekont

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.DateTimeOffsetbir 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.Doubleve 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 , -INFveya INF karşılaştırmalarına NaNizin 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 , -INFveya INF karşılaştırmalarına NaNizin verilmiyor
Edm.Int32 Edm.Int64 Yok
Edm.Int32 Edm.Int32 Yok

türündeki bir alanı Edm.Int64NaNile 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 nullunutmayı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:

İşleç 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.

İşleç 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.Doublebir 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/Skunullbelgeleri 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')

Sonraki adımlar