Boolean ifadeleri kuralları

Bu bölüm, sorgu koşul ifadelerini nasıl yazacağınızı tanıtır.

Genel Bakış

Bir predikat ifadesi bir boolean değerini çıktılar. Milvus, predikatları kullanarak skalerleri filtreler. Bir predikat ifadesini değerlendirirken, TRUE veya FALSE dönecektir. Predikat ifadelerini nasıl kullanacağınız konusunda rehber almak için lütfen Python SDK API referansına bakın.

Operatörler

Mantıksal Operatörler

Mantıksal operatörler iki ifadeyi karşılaştırır.

Sembol Operasyon Örnek Açıklama
'and' && VE expr1 && expr2 Hem expr1 hem de expr2 doğru olduğunda True döner.
'or' || VEYA expr1 || expr2 Hem expr1 hem de expr2'den biri doğru olduğunda True döner.

İkili Aritmetik Operatörler

İkili aritmetik operatörler iki işleni alır ve temel aritmetik işlemleri gerçekleştirerek karşılık gelen sonucu döndürür.

Sembol Operasyon Örnek Açıklama
+ Toplama a + b İki işlemi birbirine ekler.
- Çıkarma a - b İlk işlemi ikinci işlemden çıkarır.
* Çarpma a * b İki işlemi çarpar.
/ Bölme a / b İlk işlemi ikinci işleme böler.
** Üs alma a ** b İlk işlemi ikincinin üssüne yükseltir.
% Mod a % b İlk işlemi ikinci işleme böler ve kalanı döndürür.

İlişkisel Operatörler

İlişkisel operatörler, iki ifade arasındaki eşitlik, eşitsizlik veya göreli sıralamayı kontrol etmek için semboller kullanır.

Sembol Operasyon Örnek Açıklama
< Küçüktür a < b a, b'den küçükse True döner.
> Büyüktür a > b a, b'den büyükse True döner.
== Eşittir a == b a, b'ye eşitse True döner.
!= Eşit değil a != b a, b'ye eşit değilse True döner.
<= Küçük eşit a <= b a, b'den küçük veya eşitse True döner.
>= Büyük eşit a >= b a, b'den büyük veya eşitse True döner.

Operatör Öncelik ve İlişkilendirme

Aşağıdaki tablo, operatörlerin önceliğini ve ilişkilendirilmesini listeler. Operatörler, öncelik sırasına göre yukarıdan aşağıya doğru listelenir.

Öncelik Operatör Açıklama İlişkilendirme
1 + - İkili aritmetik operatörler Soldan sağa
2 not Tekli mantıksal operatör Sağdan sola
3 ** İkili aritmetik operatör Soldan sağa
4 * / % İkili aritmetik operatör Soldan sağa
5 + - İkili aritmetik operatör Soldan sağa
6 < <= > >= Karşılaştırma operatörleri Soldan sağa
7 == != Karşılaştırma operatörleri Soldan sağa
8 like LIKE Eşleştirme operatörü Soldan sağa
9 json_contains JSON_CONTAINS JsonArray operatörü Soldan sağa
10 json_contains_all JSON_CONTAINS_ALL JsonArray operatörü Soldan sağa
11 json_contains_any JSON_CONTAINS_ANY JsonArray operatörü Soldan sağa
12 && and İkili mantıksal operatör Soldan sağa
13 || or İkili mantıksal operatör Soldan sağa

İfadeler genellikle soldan sağa değerlendirilir. Karmaşık ifadeler birer birer değerlendirilir. İfadelerin değerlendirme sırası, kullanılan operatörlerin önceliğine göre belirlenir.

Bir ifade, aynı önceliğe sahip iki veya daha fazla operatör içeriyorsa, soldaki operatör önce değerlendirilir.

Örneğin, 10 / 2 * 5, (10 / 2) olarak değerlendirilir ve sonuç 5 ile çarpılır.

Daha düşük öncelikli işlemlere öncelik vermek gerektiğinde, parantez içine alınmalıdır.

Örneğin, 30 / 2 + 8. Genellikle 30'u 2'ye böler, ardından sonuca 8 eklenir. Eğer 2'ye bölmek yerine 2'ye bölünmüş bir sayıya 8 eklemek istiyorsanız, 30 / (2 + 8) olarak yazılmalıdır.

Parantezler bir ifade içinde iç içe olabilir. En içteki parantezler önce değerlendirilir.

Örnek durumlar

İşte Milvus'ta mevcut tüm boolean ifadelerin örnekleri (int64, INT64 türündeki verileri içeren bir skaler alanı temsil eder, float, kayan nokta türündeki verileri içeren bir skaler alanı temsil eder ve VARCHAR, VARCHAR türündeki verileri içeren bir skaler alanı temsil eder):

  1. Karşılaştırma ifadesi
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
  1. Mantıksal operasyonlar ve parantezler
"(int64 > 0 && int64 < 400) veya (int64 > 500 && int64 < 1000)"
  1. in ifadesi

Milvus, yalnızca açıkça tanımlanmış birincil anahtara sahip varlıkların silinmesini destekler, bu yalnızca in terim ifadesi aracılığıyla gerçekleştirilebilir.

"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
  1. TermExpr, BinaryLogicalOp ve CmpOp (farklı alanlarda)
"int64 in [1, 2, 3] ve float != 2"
  1. BinaryLogicalOp ve CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
  1. CmpOp ve UnaryArithOp veya BinaryArithOp
"200+300 < int64"
  1. MatchOp (önek eşleme)
VARCHAR like "prefix%"
  1. JsonArrayOp
  • JSON_CONTAINS(identifier, JsonExpr)

    JSON_CONTAINS ifadesindeki JSON ifadesi (ikinci parametre) bir liste ise, tanımlayıcı (ilk parametre) bir liste olmalıdır. Aksi takdirde ifade her zaman False olarak değerlendirilir.

json_contains(x, 1) # ==> true
json_contains(x, "a") # ==> false

json_contains(x, [1,2,3]) # ==> true
json_contains(x, [3,2,1]) # ==> false
  • JSON_CONTAINS_ALL(identifier, JsonExpr)

    JSON_CONTAINS_ALL ifadesindeki JSON ifadesi her zaman bir liste olmalıdır.

json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6 mevcut değil)
  • JSON_CONTAINS_ANY(identifier, JsonExpr)

    JSON_CONTAINS_ANY ifadesindeki JSON ifadesi her zaman bir liste olmalıdır. Aksi takdirde davranışı JSON_CONTAINS ile aynıdır.

json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false