ស្វែងយល់ពី Full Text Search នៅក្នុង MySQL (វគ្គ៣)

ក្នុងអត្ថបទមុន បានបង្ហាញលំអិតអំពីការប្រើប្រាស់ Boolean Full Text Search ។ ក្នុងអត្ថបទនេះដែរ យើងខ្ញុំនឹងបង្ហាញ នូវប្រភេទនៃ Full Text Search ទៀតគឺ Natural Language Search ។ Natural language Search បកប្រែ String ដែលស្វែងរក ឲ្យទៅជា Free Text (ភាសាមនុស្សជាតិ) ហើយក៏មិនត្រូវការ Operator ពិសេសនោះដែរ ។

១. Boolean Full Text Search

២. Natural Language Full Text Search

ការប្រើប្រាស់ Natural Language Full Text Search ត្រូវបានបញ្ជាក់ដោយ IN NATURAL LANGUAGE MODE ដែលប្រើក្នុង AGAINST() ។ គ្រប់ Row និមួយៗក្នុងតារាង  MATCH() ទាញយកទិន្នន័យដែលមានតំលៃប្រហាក់ប្រហែល ដោយប្រៀបធៀបទៅនឹង String ដែលត្រូវស្វែងរក ដែលប្រើក្នុង AGAINST() ជាមួយនឹងអត្ថបទ (Text) នៅក្នុង Row ដែលប្រើ MATCH() ។

Syntax សំរាប់ Natural Language Full Text Search

SELECT * FROM table_name WHERE MATCH(column_1, column_2)
AGAINST('search terms' IN NATURAL LANGUAGE MODE)

កំណត់ចំណាំ៖ ចំនួនតួអក្សរតិចបំផុត សំរាប់ Full Text Search គឺ ៣តួអក្សរ សំរាប់ innoDB Search Index ហើយ ៤តួអក្សរ សំរាប់ MyISAM Search Index ។ ចំពោះពាក្យសាមញ្ញដែមប្រើច្រើនក្នុង អត្ថបទ ដូចជា ‘in’, ‘as’, ‘the’, ‘for’និងជាច្រើនទៀត មិនត្រូវបានយកមកប្រើ ដើម្បីស្វែងរកនោះទេ។

ឧទាហរណ៍៖ នៅក្នុងតារាង users មាន 5 records

full_text_search_natural_1

២.១ ស្វែងរកទិន្ន័យដោយសរសេរឃ្លា ‘work as developer in company’ នោះវាយកពាក្យ developer និង company ក្រៅពីហ្នឹង គឺមិនយកមក ដើម្បីស្វែងរកនោះទេ។

SELECT * FROM `user` WHERE MATCH(description)
AGAINST('work as developer in company' IN NATURAL LANGUAGE MODE)

លទ្ធផល នឹងបង្ហាញដូចខាងក្រោម៖

full_text_search_natural_2

២.២ ស្វែងរកទិន្នន័យដោយប្រើ “my job career” វានឹងយកពាក្យ “job” និង “career” ហើយលើកលែងតែពាក្យ “my”

SELECT * FROM `user` WHERE MATCH(description)
AGAINST('my job career' IN NATURAL LANGUAGE MODE)

យោងតាម SQL ខាងលើ ការប្រើប្រាស់ MATCH() នៅក្នុង WHERE វានឹងបង្ហាញលទ្ធផលណា ទៅតាមតំលៃប្រហាក់ ប្រហែល គិតជាលេខទសភាគវិជ្ជមាន។ ចំនួនទសភាគដែលធំជាងគេ ត្រូវដាក់ខាងលើ បើមានតំលៃសូន្យ មានន័យថា  មិនប្រហាក់ប្រហែលគ្នា ។

ដើម្បីមើលតំលៃប្រហាក់ប្រហែល សាកល្បងដាក់ MATCH() ដូចខាងក្រោម៖

SELECT id, name, phone_number, address, description, 
MATCH(description) AGAINST('my job career' IN NATURAL LANGUAGE MODE) as relevance_value 
FROM `users`

full_text_search_natural_5

តាមលទ្ធផលខាងលើ បង្ហាញថា ចំពោះ Row នៃ id លេខ ១ និងលេខ ៥ មានតំលៃប្រហាក់ប្រហែលស្មើសូន្យ ហើយ Row នៃ id លេខ ៤ មានតំលៃប្រហាក់ប្រហែលខ្ពស់ជាងគេ នឹងត្រូវបង្ហាញលើគេ និងបន្តបន្ទាប់ទៅតាមតំលៃប្រហាក់ប្រហែល។ ចុងក្រោយ នឹងបង្ហាញលទ្ធផលដូចរូប៖

full_text_search_natural_3

អត្ថបទបន្ទាប់ នឹងបង្ហាញពីការប្រើប្រាស់ MYSQL Query Expansion ។
សូមអរគុណ!