اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
حالتی را در نظر بگیرید که بخواهید تعداد زیادی رکورد را که حجم هر رکورد هم قابل ملاحظه هست، نگهداری کنید(مثلا چندین هزار مقاله) و همچنین قابلیت جستجو را در این رکوردها لحاظ کنید به صورتی که بر اساس رکوردهایی که بیشترین تعداد تکرار کلمات مدنظر را دارند مرتب شوند.
شاید اولین راه حل، مطلب آقای سلیم آبادی در اینجا باشه، که تعداد تکرار یک کلمه را در فیلدی در جدول بیان کردند و درست هم هست اما با 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 INNER JOIN CONTAINSTABLE(Articles, Data, 'management' ) AS p ON t.Id = p.[KEY] ORDER BY p.RANK
نکته: هیچ فرقی نمیکند که محتویات فیلد مورد نظر شما یک متن ساده، یک فایل word یا حتی pdf باشد. فقط باید تنظیمات Full Text Search درست انجام شود.