آموزش Boolean full-text در MySQL
- توسط : علی حسین شهابی
- 0 نظر
با سلامی دوباره خدمت دوستان عزیز
در ادامه ی مقالات مربوط به Full Text Search , امروز می خواهم درباره مد دیگری صحبت کنم به نام Boolean .
اگر سری های قبلی آموزش های Full Text Search را نخوانده اید , پیشنهاد می کنم در ابتدا آنها را مطالعه کنید .
در این آموزش یادمیگریم که چگونه در 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 )
خروجی :
همانطور که مشاهده می کنید دو محصولی که در نام (productName) آنها کلمه Truck می باشد را نمایش می دهد .
در مثال بعدی به دنبال محصولاتی هستیم که در نام آنها کلمه Truck وجود دارد ولی کلمه Pickup وجود ندارد .
SELECT productName, productline
FROM products
WHERE MATCH(productName) AGAINST('Truck -Pickup' IN BOOLEAN MODE )
خروجی :
همانطور که مشاهده کردین از علامت منفی , برای جلوگیری از نمایش رکوردهایی که نام آنها شامل 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 )
خب مقاله امروز هم به پایان رسید.خوشحال میشم مثل همیشه نظراتتون رو اعلام کنید.