آموزش پیشرفته SQL Server (جلسه هفتم) - آشنایی با Full-Text Search

Full-Text Search، قسمتی از آموزش پیشرفته SQL Server است، پیشنهاد می شود قبل از مطالعه ی Full-Text Search، قسمت های قبلی را مرور فرمایید.


Full-Text Search چیست؟

Full-Text Search یکی از سرویس های SQL Server است.

هدف استفاده از Full-Text Search جستجو در داده های حجیم است.

انواع داده هایی که در Full-Text Search قابل پشتیبانی هستند:

  1. Char / NChar
  2. VarChar / NVarChar
  3. Text / NText
  4. Binary / VarBinary
  5. Image
  6. XML
  7. FILESTREAM

مقایسه Like و Full-Text Search

در مقابل Full-Text Search از Like نمی توان برای جستجو در بین داده های باینری استفاده کرد و فقط برای جستجو در بین کاراکترها، طراحی شده است.

برای جستجو در بین حجم زیادی از داده ها، دستور Like در مقابل Full-Text Search بسیار کندتر عمل خواهد کرد.

برای جستجو در بین چند میلیون رکورد، دستور Like ممکن است چندین دقیقه طول بکشید در حالی که Full-Text Search در چند ثانیه نتیجه را نشان خواهد داد. 


راه اندازی سرویس Full-Text Search

برای Start یا راه اندازی سرویس Full Text Search، از منوی Start روی Computer راست کلیک کرده و گزینه Manage را انتخاب نمایید، بلافاصله پنجره Server Manager نمایان می شود. مطابق شکل زیر از سمت چپ گزینه Services را انتخاب کنید و برای Start یا راه اندازی سرویس Full Text Search روی گزینه SQL Full-text Filter Daemon Launcher کلیک راست کرده و گزینه Start را انتخاب نمایید:

نکته: سرویس Full-Text Search به ازای هر Instance می باشد، یعنی اگر روی کامپیوترتان دو Instance از SQL Server نصب کرده باشید، در قسمت Services دو سرویس Full-Text Search خواهید دید، البته در انتهای نام سرویس، نام Instance داخل پرانتز ذکر شده است.

یک روش دیگر برای مشاهده سرویس های SQL Server، از طریق برنامه SQL Server Configuration Manager است، بنابراین روی منوی Start کلیک کرده و گزینه All Programs را انتخاب نمایید، سپس گزینه... Microsoft SQL Server و سپس Configuration Tools را گسترش دهید و نهایتاً روی SQL Server Configuration Manager کلیک نمایید.

بلافاصله پنجره SQL Server Configuration Manager نمایان می شود، حالا با کلیک روی SQL Server Services می توانید کلیه سرویس های SQL Server را مشاهده نمایید. حالا مانند قبل روی گزینه SQL Full-text Filter Daemon Launcher کلیک راست کرده و گزینه Start را انتخاب نمایید:

 توجه: برای استفاده از ویژگی Full-Text Search، باید تیک Full-Text Search را هنگام نصب SQL Server فعال کرده باشید، یعنی مطابق شکل زیر در مرحله Feature Selection، گزینه Full-Text Search فعال شده باشد:


روش کار Full-Text Search

همان طور که قبلاً گفته شد، از Full-Text Search برای جستجو در داده های حجیم استفاده می شود، به عنوان مثال جدول زیر را که شامل دو رکورد "ID" و "Description" است را تصور فرمایید:

 ID  Description
 1 همان طور که قبلاً گفته شد، از قابلیت Full-Text Search برای جستجو در داده های حجیم استفاده می شود، به عنوان مثال جدول زیر را که شامل دو رکورد "ID" و "Description" را تصور فرمایید:
 2 Full-Text Search یکی از سرویس های SQL Server است.
 3 هدف استفاده از Full-Text Search جستجو در داده های حجیم است.
 4 Full-Text Search، قسمتی از آموزش پیشرفته SQL Server است، پیشنهاد می شود قبل از مطالعه ی Full-Text Search، قسمت های قبلی را مرور فرمایید.
 ...  ...

 اگر قابلیت Full-Text Search را روی جدول بالا فعال کنید، به ازای تک تک کلمات بکار رفته در فیلد "Description" بهمراه شماره رکورد آنها، ایندکس ایجاد خواهد شد:

کلمه  شماره رکورد
همان  1
طور  1
Full-Text  1
Full-Text  2
Full-Text  3
Full-Text  4
جستجو  1
جستجو  3
...  ...

از این لحظه به بعد اگر به دنبال کلمه ای در فیلد "Description" باشید، بجای اینکه تمام ستون Description جستجو شود، جدول ایندکس های مربوط به Full-Text Search جستجو خواهد شد. و این کار بشدت سرعت اجرای کوئری ها را افزایش خواهد داد.

در Full-Text Search براساس یک یا چند ستون جدول ایندکس گذاری انجام می شود و برای هر ستون می توان از قواعد یک زبان خاص استفاده نمود.

 توجه: کلمات اضافه مثل "که"، "است"، "را" و... ارزش ایندکس کردن را ندارند، شما می توانید به راحتی این کلمات را به Full-Text search معرفی نمایید. (StopList)


بررسی اصطلاحات رایج در Full-Text Search

پیشنهاد می شود قبل از فعال سازی Full-Text Search با اصطلاحات زیر آشنا شوید، با فهم دقیق هر کدام از اصطلاحات زیر بهتر می توانید از امکانات Full-Text Search استفاده نمایید:

1- Term

Term، جلمه یا کلمه ای است که برای تهیه ایندکس مورد استفاده قرار می گیرد.

2- Full Text Index 

Full Text Index ظرفی است که فیلدهای مورد نظر ما جهت ایندکس را نگهداری می کند.

توجه: در Full Text Index تعداد n فیلد از جداول مختلف می تواند قرار بگیرد.

3- Full Text Catalog

Full Text Catalog ظرفی است که یک یا چند Full Text Index را نگهداری می کند.

قابلیت ذخیره سازی Full Text Catalog در File-Group از نسخه SQL Server 2008 به بعد اضافه شده است.

توجه: در مواردی که حجم اطلاعات زیاد می شود (چند صد گیگابایت در هر جدول) انتخاب نحوه ذخیره کاتالوگ و محل آن مهم است و می بایست با دقت انجام شود. مثلا ً کاتالوک در همان هارد دیسکی باشد که جدول در آن ذخیره شده یا کاتالوگ و جدول در چند سرور پخش شود.

4- Word Breaker

Word Breaker، مجموعه قواعد زبان شناسی است که براساس آن لغات یک جمله تکه تکه می شود. و در واقع با استفاده از Word Breaker، می توان فهرستی از کلمات مورد نیاز اینکدس ها را استخراج نمود.

مثال: لطفاً به جمله "آموزش افزایش سرعت بانک های اطلاعاتی" توجه فرمایید. یک روش استخراج کلیمات جمله مذکور بصورت زیر خواهد بود:

  • آموزش
  • افزایش
  • سرعت
  • بانک های
  • اطلاعاتی

اما آیا کلمه "بانک های" را نمی توان به دو کلمه "بانک" و "های" شکست...!؟ در واقع Word Breaker قاعده و الگوی شکستن و تکه تکه کردن کلمایت را مشخص می کند.

5- Token

Token کلمه یا رشته ای که توسط Word Breaker استخراج می شود. در مثال بالا، هر کدام از کلمات "آموزش"، "افزایش"، "سرعت"، "بانک های" و "اطلاعاتی" هر کدام یک Token هستند.

6- Stemmer

با استفاده از Stemmer می توان با توجه به قواعد زبان، هم خانواده ها یا صرف فعلهای یک لغت را تولید نمود.

مثال: write و wrote یا foot و feet

7- Filter

با استفاده از Filter می توان متن ذخیره شده در نوع داده varbinary را استخراج نمود . انواع فایلهای MS Office جزء نوع هایی است که فیلترها امکان استخراج متن از آنرا دارند.

به ازای هر نوع فایل یک DLL وجود دارد، مثلاً برای فایل های Word یک DLL خاص وجود دارد و زمانی که نوع فایل تشخیص داده شد، DLL مربوطه روی سرور لود شده و با استفاده از آن عملیات Full-Text Search انجام خواهد شد.

شرکتهای دیگر مثل Adobe بعنوان مثال برای نوع فایل PDF فیلترهای سفارشی خودشان را ساخته اند که با یک جستجو در گوگل آنها را خواهید یافت.

8- Population یا crawl

با استفاده از Population عملیات خزش یا crawl در متن انجام می شود. و در واقع Population وظیفه ایجاد و نگهداری و به روز رسانی Full Text Index را دارد.

9- Noise Words یا Stop Word

Stop Word، لغاتی هستند که کمکی در جستجوها نکرده و بی دلیل حجم ایندکس ها را افزایش می دهند.

Stop Word ها می بایست نادیده گرفته شوند.

مثال: در جمله "شما در آموزش افزایش سرعت بانک اطلاعاتی، جستجو در بین فایل و عکس را یاد می گیرد " کلمات زیر نیازی به ایندکس شدن ندارند:

  • شما
  • در
  • را

10- Stop List

Stop List ظرفی است که Noise Word ها را در خود نگهداری می کند.

11- Thesaurus

Thesaurus یک فایل XML است و حاوی اطلاعات مترادف ها می باشد.

مثال: Internet Explorer و IE مترادف است.


مثال عملی از Full-Text Search

مثال 1: آیا Instance جاری از قابلیت Full-Text Search پشتیبانی می کند:


SELECT SERVERPROPERTY('IsFullTextInstalled')

مثال 2: همان طور که در Word Breaker توضیح داده شد، برای تکه تکه کردن جلمات از قواعد یک زبان خاس استفاده خواهد شد. اسکریبت زیر لیست تمام زبان هایی که بصورت پیش فرض پشتیبانی می شوند را نمایش خواهد داد:

کلیه زبان های پیش فرض SQL Server

SELECT * FROM sys.fulltext_languages

زبان عربی

SELECT * FROM sys.fulltext_languages WHERE name='Arabic'

زبان خنثی که برای فارسی مناسب می باشد

SELECT * FROM sys.fulltext_languages WHERE name='Neutral'

متأسفانه زبان فارسی در لیست اول وجود ندارد و مجبوریم از حالت Neutral استفاده کنیم.

مثال 3: استفاده از تابع sys.dm_fts_parser

با استفاده از تابع sys.dm_fts_parser می توان نتیجه تکه تکه کردن متن را با توجه به قواعد زبان (word breaker) و مترادف ها (Thesaurus)  و همچنین لیست کلمات زائد (Stop List) مشاهده نمود. در واقع تابع sys.dm_fts_parser لیست Token ها را نمایش خواهد داد:

نحوه ی استفاده:

تابع sys.dm_fts_parser

sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)

برای کسب اطلاعات بیشتر به لینک روبرو مراجعه فرمایید: تابع sys.dm_fts_parser

پارامترها:

پارامتر توضیح
query_string

متن یا جمله مورد نظر برای تکه تکه کردن

lcid

ID یا شنایه زبان مورد نظر برای استفاده از قواعد آن برای تکه تکه کردن
کوئری SELECT * FROM sys.fulltext_languages لیست کلیه زبان ها را همراه با کد lcid نمایش خواهد داد.

stoplist_id

ID یا شناسه Stop List

accent_sensitivity حساس بودن به حروف بزرگ و کوچک

در ادامه آموزش Full-Text Search خواهید دید...!

با خرید جلسه 7 از بسته آموزشی "افزایش کارایی پایگاه داده" موارد زیر را خواهید دید:

  1. مشاهده لیست کلمات زائد (Stop List) به ازای یک زبان خاص و اضافه، ویرایش و حذف کلمات موجود
  2. برای افزایش کارایی می توان داده های یک جدول را به همراه جدول ایندکس های Full-Text Search به یک File-Group جدید منتقل نمود.
  3. نحوه ی ایجاد Full Text Catalog
  4. نحوه ی ایجاد Full Text Index
  5. نحوه ی به روز رسانی جدول ایندکس های Full Text Index
  6. استفاده از تابع ()CONTAIN برای جستجو در فیلدها
  7. با چندین مثال عملی، با نحوه ی استفاده از Full-Text Search آشنا خواهید شد.

دسترسی به موارد آموزشی بالا در بسته خریداری شده

  • شماره جلسه: 7
  • نام فایل ویدئو: 01 و 02
  • فرمت فایل: mp4.

نقطه شروع بحث بالا (Full-Text Search) در ویدئو: 00:00


برای خرید و دانلود کاملآموزش پیشرفته SQL Server کلیک کنید.

READ MORE