حالتی را در نظر بگیرید که بخواهید
تعداد زیادی رکورد را که حجم هر رکورد هم قابل ملاحظه هست، نگهداری
کنید(مثلا چندین هزار مقاله) و همچنین قابلیت جستجو را در این رکوردها لحاظ
کنید به صورتی که بر اساس رکوردهایی که بیشترین تعداد تکرار کلمات مدنظر
را دارند مرتب شوند.
شاید اولین راه حل، مطلب آقای سلیم آبادی در اینجا باشه، که تعداد تکرار یک کلمه را در فیلدی در جدول بیان کردند و درست هم هست اما با 2 شرط:
1) رکوردهای ما حجم کمی داشته باشند چرا که دستور LIKE پاسخ سریعی را با حجم بالای اطلاعات به ما نمیدهد.
2) رکوردهای ما از خانوادهی char باشند. برای مثال اگر مقالات ما به صورت pdf باشند این کد جواب نمیدهد.
اما راه دوم استفاده از Ful Text Search و
دستور CONTAINSTABLE هست که 2 شرط لازم را برای راه حل اول احتیاج نداره.
در اینجا فقط نحوهی استفاده از CONTAINSTABLE رو مطرح میکنیم.
CONTAINSTABLE
جدولی از موارد یافت شده را بر اساس معیارهایی که ما به اون معرفی
میکنیم، ایجاد میکند. این جدول حاوی دو فیلد KEY(کلید فیلد مورد نظر) و
RANK(مقداری بین 0 تا 1000) است که میزان همسانی رکورد با معیار ما را مشخص
میکند و ما با استفاده از این فیلد میتوانیم رکوردهایمان را مرتب کنیم.
به این کد توجه کنید:
SELECT t.Title, p.[RANK]
FROM Articles AS t
INNERJOIN CONTAINSTABLE(Articles, Data, 'management' ) AS p
ON t.Id = p.[KEY]
ORDERBY p.RANK
در اینجا کار جستجو انجام شده و بر حسب میزان نزدیکی محتویات رکورد با معیار ما مرتب شده است.
نکته:
هیچ فرقی نمیکند که محتویات فیلد مورد نظر شما یک متن ساده، یک فایل word
یا حتی pdf باشد. فقط باید تنظیمات Full Text Search درست انجام شود.