آموزش Boolean full-text در MySQL

علی حسین شهابی

1395/8/14

نظر0

با سلامی دوباره خدمت دوستان عزیز

در ادامه ی مقالات مربوط به Full Text Search , امروز می خواهم درباره مد دیگری صحبت کنم به نام Boolean .

اگر  سری های  قبلی آموزش های Full Text Search را نخوانده اید , پیشنهاد می کنم در ابتدا آنها را مطالعه کنید .

  1. معرفی MySQL Full-Text Search

  2. آموزش MATCH و AGAINST در MySQL full text search

  3. آموزش  Boolean full-text در MySQL
  4. آموزش  Query Expansion در MySQL

در این آموزش یادمیگریم که چگونه در MYSQL بتوانیم Boolean full-text searches انجام دهیم  و همچنین کوئری های پیچیده تری را با استفاده از FULLTEXT بزنیم .

در کنار natural language search که قبلن دربارش صحبت کردیم , MYSQL نوع دیگری از FULLTEXT را به نام Boolean معرفی کرده است  که در این نوع , می توانیم کوئری های پیچیده تری را با ترکیبی از  operators های مختلف انجام دهیم.

برای استفاده از این مد , کافی است در تابع AGAINST از IN BOOLEAN MODE استفاده نماییم که سینتکس آن مانند زیر است .

در این مثال تمام محصولاتی که در نام آنها کلمه Truck است :

SELECT productName, productline
FROM products
WHERE MATCH(productName) 
      AGAINST('Truck' IN BOOLEAN MODE )

خروجی :

آموزش FULLTEXT SEARCH

آموزش FULLTEXT SEARCH

همانطور که مشاهده می کنید دو محصولی که در نام (productName) آنها کلمه Truck می باشد را نمایش می دهد .

در مثال بعدی به دنبال محصولاتی هستیم که در نام آنها کلمه  Truck وجود دارد ولی کلمه Pickup وجود ندارد .

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE )

خروجی :

آموزش mysql-boolean-tex-searches

آموزش mysql-boolean-tex-searches

همانطور که مشاهده کردین از علامت منفی , برای جلوگیری از نمایش رکوردهایی که نام آنها شامل Pickup است , استفاده کرده ایم .

MySQL boolean full-text search operator

در جدول زیر تمام operator که می توانیم در boolean full-text search استفاده کنیم آورده شده است .

Operator Description
+ Include, the word must be present.
Exclude, the word must not be present.
> Include, and increase ranking value.
< Include, and decrease the ranking value.
() Group words into subexpressions (allowing them to be included, excluded, ranked, and so forth as a group).
~ Negate a word’s ranking value.
* Wildcard at the end of the word.
“” Defines a phrase (as opposed to a list of individual words, the entire phrase is matched for inclusion or exclusion).

 

 

مثال :

نمایش رکوردهایی که در نام آنها حداقل یکی از کلمات mysql و tutorial موجود باشد :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('mysql tutorial' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که در نام آنها هر دو کلمه  mysql و tutorial موجود باشد :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('+mysql +tutorial' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که در نام آنها حتما کلمه ی mysql است و اگر کلمه ی tutorial هم بود چه بهتر . در واقع کلمه ی  tutorial اختیاری است و اگر باشد , آن رکورد امتیاز بیشتری گرفته و در بالاتر نمایش می یابد  :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('+mysql tutorial' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که در نام آنها  کلمه  mysql  موجود است ولی کلمه  tutorial موجود نیست :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('+mysql -tutorial' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که در نام آنها حتما کلمه ی mysql است و اگر کلمه tutorial بود امتیاز منفی محسوب شده و رکورد مورد نظر در نتایج پایین تر نمایش می یابد :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('+mysql ~tutorial' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که در نام آنها حتما کلمه های  mysql و tutorial و یا کلمه های mysql و training باشد با این شرط که رکوردهایی که شامل mysql و tutorial بودند ارزش بیشتری دارند و بالاتر نشان داده می شوند . این اولیت دهی با علامت های < و > انجام می پذرید :

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('+mysql +(>tutorial <training)' IN BOOLEAN MODE )

مثال :

نمایش رکوردهایی که نام آنها با کلمه ی my آغاز شود . مانند mysql یا myyahoo و یا …..

SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('my*' IN BOOLEAN MODE )

خب مقاله امروز هم به پایان رسید.خوشحال میشم مثل همیشه نظراتتون رو اعلام کنید.

اینستاگرام علی حسین شهابی لینکدین علی حسین شهابی

0 نظر

ارسال نظر جدید

 
Not signed in

کلیه حقوق مادی و معنوی , متعلق به سایت (Alihossein.ir)می باشد ,انتشار مطالب بدون ذکر منبع از نظر اخلاقی و شرعی صحیح نمی باشد.