Full Text Search و Rank فیلدهای بازیابی شده
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

حالتی را در نظر بگیرید که بخواهید تعداد زیادی رکورد را که حجم هر رکورد هم قابل ملاحظه هست، نگهداری کنید(مثلا چندین هزار مقاله) و همچنین قابلیت جستجو را در این رکوردها لحاظ کنید به صورتی که بر اساس رکوردهایی که بیشترین تعداد تکرار کلمات مدنظر را دارند مرتب شوند.
شاید اولین راه حل، مطلب آقای سلیم آبادی در اینجا باشه، که تعداد تکرار یک کلمه را در فیلدی در جدول بیان کردند و درست هم هست اما با 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 درست انجام شود.
  • #
    ‫۱۱ سال و ۴ ماه قبل، شنبه ۱۱ خرداد ۱۳۹۲، ساعت ۰۳:۱۹
    برای PDF که عنوان کردید، آیا جستجوی فارسی کار می‌کند؟ از چه IFilter ایی برای اینکار استفاده کردید؟
    • #
      ‫۱۱ سال و ۴ ماه قبل، شنبه ۱۱ خرداد ۱۳۹۲، ساعت ۱۹:۲۰
      بله کار میکنه. من با Adob IFilter(رایگان) و Foxit IFilter(تجاری هست) کار کردم.
  • #
    ‫۱۱ سال و ۱ ماه قبل، چهارشنبه ۶ شهریور ۱۳۹۲، ساعت ۱۶:۵۲
    سلام.
    من با rank کار می‌کنم توی پروژه هام.
    منتها خیلی وقت‌ها رکوردهایی رنک بالایی می‌گیرند در حالی که رکوردهای مشابه دیگر رنک پایینی می‌گیرند. البته کمتر از 5 درصد اتفاق می‌افته
    در مورد خود رنک مطلب خوبی پیدا نکردم که اصلا خود مفهوم رنک رو برام توضیح بده
    • #
      ‫۱۰ سال و ۹ ماه قبل، سه‌شنبه ۲۴ دی ۱۳۹۲، ساعت ۲۲:۵۷
      منم توی این رنک بدجور گیر کردم. به جابجایی کامات حساسه.مثلا «خواجه علی» و «علی خواجه».
  • #
    ‫۸ سال و ۷ ماه قبل، یکشنبه ۱۸ بهمن ۱۳۹۴، ساعت ۰۰:۴۹
    با سلام و تشکر. من متن چند کتاب رو به صورت Full Text ذخیره کرده ام، اما مشکلی که دارم این هستش که وقتی به دنبال کلمه ای می‌گردم نیاز دارم به جز نتایج آماری تکرار آن ها، جمله‌ی مربوطه یا چند کلمه قبل و بعد از اون رو هم بازیابی کرده و به کاربر نشان دهم. بسیار ممنون می‌شم راهنمایی بفرمایید.