ورود

View Full Version : مفاهیم و پیاده سازی Full Text Search در SQL Server



mohammad reza beizavi
جمعه 04 مهر 1393, 18:24 عصر
Full Text Search امکان index کردن و جستجوی داده های رشته ای را بر اساس لغات و کلمات در بانک های اطلاعاتی فراهم می کند.
مسلما اولین فکری که به ذهن خطور می کند این است که با Like هم می توان این نوع جستجو را انجام داد و نیازی به درگیر شدن با مفاهیمی همچون Full Text Search نیست؛ اما این نکته را باید در نظر داشت که Like به طور ماهیتی با Full Text Search تفاوتهایی دارد که قیاس آنها کار درستی نیست.
اگر شما قصد اجرای پرس و جویی را دارید که عین عبارت مورد نظرتان (با ابتدا و یا انتهای نا مشخص) را از داده های درون یک ستون (با نوع داده رشته) از یک جدول پایگاه داده به شما بازگرداند بی شک سراغ Select Where Like خواهید رفت.

اما آیا می دانید که برای هر بار استفاده از Like بانک اطلاعاتی تمام داده های جدول شما را پیمایش می کند تا عبارت مورد نظر را بیابد؟
بله درست است، در پرس و جوی حاوی Like دیگر Indexing در کار نیست و این باعث کاهش سرعت به ویژه در داده های زیاد در بانک اطلاعاتی خواهد شد.
در موردی دیگر شما اطلاعات زیادی را در فایلهای جداگانه ای ذخیره کرده اید که ثبت آنها در بانک اطلاعاتی به صورت تفکیک شده بسیار زمانبر و پر هزینه است و می خواهید آنها را در بانک اطلاعاتی نگهداری کنید. پس در جدول مقصد ستونی با نوع داده image، ntext، nchar و یا nvarchar ایجاد می کنید و در آن فایلها را به صورت Blob یا باینری ثبت می کنید. آیا می توانید با استفاده از دستور Like رشته ای را در مقادیر ثبت شده جستجو کنید؟
در کل استفاده از Like تنها روی مقادیر با نوع داده رشته ای کار می کند و در این مورد کاراریی ندارد.
و اما نمونه آخر اینکه شما می خواهید در چندین ستون از یک جدول یا حتی یک نمایه (View) رشته مورد نظرتان را جستجو کنید. این کار را با استفاده چندین و چند باره از Like در پرس و جوی خود انجام دهید که سرعت کار را به شکل کاملا محسوسی پایین می آورد.
اینها موارد نمونه ای هستند که نیاز به استفاده از روش دیگری غیر از Like را الزامی می کند.
FullText Search علاوه بر پوشش ضعفها و نیازهای ذکر شده، قابلیتهایی را به شما ارائه می دهد که به کارایی پایگاه داده و نرم افزارهای متکی بر آن کمک شایانی خواهد نمود.
به منظور کار با این مفهوم(Full Text Search: FTS) آشنایی با یک سری از عبارات و کلمات مورد استفاده در آن مفید خواهد بود:
Full Text Index: اندیس گذاری عبارتها برای افزایش سرعت جستجو (برای اطلاعات بیشتر در مورد اندیس گذاری به اینجا (http://www.devexir.com/articlaes/database-concepts/82-databases/123-%D8%A7%D9%86%D8%AF%DB%8C%D8%B3%D9%87%D8%A7-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87.html) مراجعه کنید). در FTS یک عبارت به اجزای تشکیل دهنده اش تقسیم شده و به ازای هر کدام از این کلمات یه اندیس درنظر گرفته می شود و در فایل مختص اندیس گذاری ذخیره می شود. به عنوان مثال عبارت "من در ایستگاه اتوبوس هستم" به پنج عبارت "من"، "در"، "ایستگاه"، "اتوبوس" و "هستم" تفکیک شده و اندیس گذاری می شوند.

دوستان برای ادامه مباحث در این زمینه می توانند به آدرسهای زیر مراجعه کنند.

آشنایی با Full Text Search یا FTS (http://www.devexir.com/84-databases/mssql/128-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-full-text-search-%DB%8C%D8%A7-fts.html)پیاده سازی یک نمونه ساده برای Full Text Search (http://www.devexir.com/84-databases/mssql/129-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%DB%8C%DA%A9-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-full-text-search.html)