বুলিয়ান অভিব্যক্তির নিয়ম
এই অধ্যায়ে আমরা দেখাবো কীভাবে কোয়ারী শর্ত অভিব্যক্তি লিখতে হয়।
ওভারভিউ
একটি প্রেডিকেট অভিব্যক্তি একটি বুলিয়ান মান প্রদান করে। Milvus প্রেডিকেট ব্যবহার করে স্কেলার ফিল্টার করে। যখন একটি প্রেডিকেট অভিব্যক্তি মূল্যায়ন করা হয়, তখন সে TRUE বা FALSE ফিরতে পারে। প্রেডিকেট অভিব্যক্তি ব্যবহার করার নির্দেশিকা জন্য অনুগ্রহ করে Python SDK API ওয়েবসাইটটি দেখুন।
অপারেটর
লজিক্যাল অপারেটর
লজিক্যাল অপারেটর দুটি অভিব্যক্তি তুলনা করে।
চিহ্ন | অপারেশন | উদাহরণ | বর্ণনা |
---|---|---|---|
'এবং' && | AND | expr1 && expr2 | যখন উভয় expr1 এবং expr2 সঠিক হয়, তখন সত্য ফিরে। |
'অথবা' || | OR | expr1 || expr2 | যখন expr1 বা expr2 সত্য হয়, তখন সত্য ফিরে। |
বাইনারি গাণিতিক অপারেটর
বাইনারি গাণিতিক অপারেটরগুলি দুটি অপারেন্ড নেয় এবং মৌলিক গাণিতিক অপারেশন পরিচালনা করে, মান ফিরিয়ে দেয়।
চিহ্ন | অপেরেশন | উদাহরণ | বর্ণনা |
---|---|---|---|
+ | যোগ | a + b | দুটি অপারেন্ড একসাথে যোগ করে। |
- | বিয়োগ | a - b | প্রথম অপারেন্ড থেকে দ্বিতীয় অপারেন্ড বিয়োগ করে। |
* | গুণ | a * b | দুটি অপারেন্ড গুণ করে। |
/ | ভাগ | a / b | প্রথম অপারেন্ড দ্বিতীয় দ্বারা ভাগ করে। |
** | অধিকার | a ** b | প্রথম অপারেন্ড দ্বিতীয় এর সাথে গুণ করে। |
% | ভাগশেষ | a % b | প্রথম অপারেন্ড দ্বিতীয় দ্বারা ভাগ করে এবং বাকি স্থান্যক দেয়। |
তালিকা সম্পর্কিত অপারেটর
তালিকা সম্পর্কিত অপারেটরগুলি বর্ণনামূলক অপারেন্ডগুলির মধ্যে সমানতা, অসমানতা বা প্রসাংগিক বিন্যাস চেক করতে প্রতীকগুলি ব্যবহার করে।
চিহ্ন | অপারেশন | উদাহরণ | বর্ণনা |
---|---|---|---|
< | ছোট | a < b | a যদি b এর চেয়ে ছোট হয়, তবে True ফিরিয়ে দেয়। |
> | বড় | a > b | a যদি b এর চেয়ে বড় হয়, তবে True ফিরিয়ে দেয়। |
== | সমান | a == b | a যদি b এর সমান হয়, তবে True ফিরিয়ে দেয়। |
!= | সমান নয় | a != b | a যদি b এর সমান না হয়, তবে True ফিরিয়ে দেয়। |
<= | কম অথবা সমান | a <= b | a যদি b এর চেয়ে কম অথবা সমান হয়, তবে True ফিরিয়ে দেয়। |
>= | বড় অথবা সমান | a >= b | a যদি b এর চেয়ে বড় অথবা সমান হয়, তবে True ফিরিয়ে দেয়। |
অপারেটর প্রিসিডেন্স এবং সহযোগিতা
নীচের টেবিলে অপারেটরদের প্রিসিডেন্স এবং সহযোগিতা তালিকাভুক্ত করা আছে। অপারেটরগুলি প্রিসিডেন্সের উপরে থেকে নিচের দিকে বিশ্লেষণ করা হয়।
প্রিসিডেন্স | অপারেটর | বর্ণনা | সহযোগিতা |
---|---|---|---|
1 | + - | ইউনারী গাণিতিক অপারেটর | বাম দিক থেকে ডান দিকে |
2 | not | ইউনারী লজিক্যাল অপারেটর | ডান দিক থেকে বাম দিকে |
3 | ** | বাইনারি গাণিতিক অপারেটর | বাম দিক থেকে ডান দিকে |
4 | * / % | বাইনারি গাণিতিক অপারেটর | বাম দিক থেকে ডান দিকে |
5 | + - | বাইনারি গাণিতিক অপারেটর | বাম দিক থেকে ডান দিকে |
6 | < <= > >= | তুলনা অপারেটর | বাম দিক থেকে ডান দিকে |
7 | == != | তুলনা অপারেটর | বাম দিক থেকে ডান দিকে |
8 | like LIKE | ম্যাচিং অপারেটর | বাম দিক থেকে ডান দিকে |
9 | json_contains JSON_CONTAINS | JsonArray অপারেটর | বাম দিক থেকে ডান দিকে |
10 | json_contains_all JSON_CONTAINS_ALL | JsonArray অপারেটর | বাম দিক থেকে ডান দিকে |
11 | json_contains_any JSON_CONTAINS_ANY | JsonArray অপারেটর | বাম দিক থেকে ডান দিকে |
12 | && and | বাইনারি লজিক্যাল অপারেটর | বাম দিক থেকে ডান দিকে |
13 | || or | বাইনারি লজিক্যাল অপারেটর | বাম দিক থেকে ডান দিকে |
অভিব্যক্তির মূল্যায়ন সাধারণভাবে বাম থেকে ডানে হয়। জটিল অভিব্যক্তিগুলি একে একে মূল্যায়ন করা হয়। অভিব্যক্তিগুলির মূল্যায়নের অনুক্রমণিকা অপারেটরের প্রিসিডেন্স দ্বারা নির্ধারণ করা হয়।
যদি একটি অভিব্যক্তিতে দুটি বা এরংজড়ের অপারেটর থাকে যাদের প্রিসিডেন্স একই হয়, তবে বামদিকের অপারেটরটি প্রথমে মূল্যায়ন করা হয়।
যেমন, 10 / 2 * 5 এটি মূল্যায়ন করা হবে (10 / 2) এবং ফলাফল গুণিত হবে 5 দিয়ে।
যখন নিচের-প্রিসিডেন্স অপারেটরগুলির প্রাধান্যতা দরকার হয়, তবে তাদেরকে বাধাবদ্ধ করার জন্য তাদের কে ব্রাকেটে ভুল হওয়া উচিত।
যেমন, 30 / 2 + 8। এটি সাধারণভাবে 30 দ্বারা 2 দ্বারা ভাগ করা হয় এবং তারপর 8 যোগ করা হয়। যদি আপনি 2 + 8 দ্বারা ভাগ করতে চান, তাহলে এটি 30 / (2 + 8) হতে হবে।
ব্র্যাকেটগুলি একটি অভিব্যক্তিতে নেস্ট করা যেতে পারে। অন্তঃবর্ণী ব্র্যাকেটগুলি প্রথমে মূল্যায়ন করা হয়।
উদাহরণ শর্তাদি
এখানে মিলভুসে (int64
, float
, এবং VARCHAR
যার মধ্যে INT64, ফ্লোটিং-পয়েন্ট এবং VARCHAR ধরনের তথ্য সম্মিলিত হাবে) উপলব্ধ সমস্ত বুলিয়ান অভিব্যক্তি বর্ণনা করা হল।
- তুলনা অভিব্যক্তি
"int64 > 0"
"0 < int64 < 400"
"500 < int64"
VARCHAR > "str1"
- যৌক্তিক অপারেশন এবং বন্ধনী
"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)"
- ইন অভিব্যক্তি
মিলভুস শুধুমাত্র প্রাথমিক কী-সহ এন্টিটি মোছার সাথে সমর্থিত যায়, যা in
ধারণা দ্বারা গৃহীত করা যায়।
"int64 not in [1, 2, 3]"
VARCHAR not in ["str1", "str2"]
- TermExpr, BinaryLogicalOp, এবং CmpOp (বিভিন্ন ফিল্ডে)
"int64 in [1, 2, 3] and float != 2"
- BinaryLogicalOp এবং CmpOp
"int64 == 0 || int64 == 1 || int64 == 2"
- CmpOp এবং UnaryArithOp বা BinaryArithOp
"200+300 < int64"
- MatchOp (প্রিফিক্স ম্যাচিং)
VARCHAR like "prefix%"
- JsonArrayOp
-
JSON_CONTAINS(identifier, JsonExpr)
যদি
JSON_CONTAINS
(দ্বিতীয় প্যারামিটার) বিবৃতির JSON অভিব্যক্তি একটি তালিকা হয়, তাহলে শব্দটি (প্রথম প্যারামিটার) একটি তালিকা হবে। অন্যথায়, বিবৃতিটি সর্বদা মিথ্যা মান পাবে।
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
বিবৃতির JSON অভিব্যক্তি সর্বদা একটি তালিকা হবে।
json_contains_all(x, [1,2,8]) # ==> true
json_contains_all(x, [4,5,6]) # ==> false (6 অস্তিত্বে নেই)
-
JSON_CONTAINS_ANY(identifier, JsonExpr)
JSON_CONTAINS_ANY
বিবৃতিতের মান সর্বদা একটি তালিকা হবে। অন্যথায়, এর আচরণJSON_CONTAINS
এর মতোই।
json_contains_any(x, [1,2,8]) # ==> true
json_contains_any(x, [4,5,6]) # ==> true
json_contains_any(x, [6,9]) # ==> false