استفاده از Luke برای بهبود کیفیت جستجوی لوسین
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

به صورت خلاصه اگر نیاز به جستجوی سریع و پیشرفته‌ای بر روی حجم عظیمی از اطلاعات دارید، روش متداول select * from table where field like something توصیه نمی‌شود. بسیار کند است؛ مصرف CPU بالایی دارد. از ایندکس استفاده نمی‌کند.
راه حل توصیه شده جهت برخورد با این نوع مسایل استفاده از full text search است. نگارش کامل SQL Server حاوی یک موتور FTS توکار هست . اگر از بانک اطلاعاتی خاصی استفاده می‌کنید که دارای موتور FTS نیست یا ... FTS مخصوص SQL Server به درد کار شما نمی‌خورد یا نیاز به سفارشی سازی دارد (مثلا امکان تعریف stop words فارسی (کلماتی مانند به، از، تا و امثال آن))، از موتور FTS جانبی دیگری به نام لوسین نیز می‌توان استفاده کرد.

در کنار این‌ها ابزاری برای آنالیز و کوئری گرفتن از فایل‌های ایندکس تهیه شده توسط لوسین نیز وجود دارد به نام Luke. برای نمونه اگر بانک اطلاعاتی سایت جاری را با لوسین به نحو متداولی ایندکس کنیم، در صفحه اول این برنامه، top ranking terms آن به شکل زیر ظاهر می‌شود:


در اینجا چون متون تهیه شده از نوع HTML هستند، تگ br در آن‌ها زیاد است و یا یک سری حروف و کلمات فارسی هم در صدر قرار دارند که بهتر است از لیست ایندکس حذف شوند. برای اینکار تنها کافی است یک hash table را به نحو زیر تعریف و به StandardAnalyzer لوسین ارسال کنیم:
var stopWords = new Hashtable();
stopWords.Add("br","br");
// ...
var analyzer = new StandardAnalyzer(Version.LUCENE_29, stopWords);

یا آقای عرب عامری برای حروف و کلمات فارسی که نباید ایندکس شوند، یک لیست نسبتا جامع را در اینجا تهیه کرده‌اند.
اینبار اگر stop words یاد شده را اعمال و مجددا ایندکس‌ها را تهیه کنیم به خروجی بهتری خواهیم رسید.
در کل حداقل از این لحاظ، لوسین نسبت به FTS توکار SQL Server مناسب‌تر به نظر می‌رسد.

 
  • #
    ‫۱۲ سال و ۳ ماه قبل، دوشنبه ۲۶ تیر ۱۳۹۱، ساعت ۰۴:۳۸
    سلام
    یه سری از این نمونه‌ها از کد  زیر استفاده شده
     //////////// Begin the new section
        QueryParser oParser = new QueryParser("Body", new StandardAnalyzer());
        string sTitle = "", sWriterID = "", finalQuery = "";
     
        sTitle = " AND (Title:" + titleTerm + ")";
     
        sWriterID = " AND (WriterID:" + writerID + ")";
     
        finalQuery = "(" + bodyTerm + sTitle + sWriterID + ")";
        hits = searcher.Search(oParser.Parse(finalQuery));
        //////////// End of the new section
    که به نظرم حرفه ای نیست.
    در ضمن اگه میشه چند تا سایت برای استفاده از کتابخانه در Entity framework معرفی کنید.
    • #
      ‫۱۲ سال و ۳ ماه قبل، دوشنبه ۲۶ تیر ۱۳۹۱، ساعت ۰۵:۱۷
      کاری به EF نداره. به شکل یک سیستم مستقل بهش نگاه کنید. رکوردها از Db دریافت و به شکل document به لوسین اضافه خواهند شد. در همین حین index هم تشکیل می‌شود.
      کوئری‌های آن دقیقا به همین شکلی هست که در بالا اومده و زبان آن SQL نیست.
      البته پروژه LINQ به آن هم وجود دارد: (^)

  • #
    ‫۱۲ سال و ۳ ماه قبل، سه‌شنبه ۲۷ تیر ۱۳۹۱، ساعت ۱۶:۲۴
    برای full text search در زبان فارسی این 150 کلمه که آقا عرب‌عامری زحمت کشیدن اصلا کفایت نمیکند. زبان فارسی و دیکته‌اش به این نحو اصلا مناسب ایندکس کردن نیست و بیشتر نیاز به توسعه دارد.
    شاید اگر بشه با ابزارهای توسعه‌ای که روی زبان فارسی کار شده - مثل ویراسباز ^ - خروجی بگیریم برای ایندکس کردن و در نتیجه تحلیل اونا به وسیله همین کتابخونه Luke یا  Solr یا Nutch - که در وبلاگ آقای زبردست معرفی شده ^  - آسونتره.
    • #
      ‫۱۲ سال و ۳ ماه قبل، سه‌شنبه ۲۷ تیر ۱۳۹۱، ساعت ۱۷:۳۵
      کار آقای عرب عامری فراتر است از 150 کلمه ذکر شده. آنالیز فتحه، کسره، ی فارسی و عربی و غیره هم در آن لحاظ شده.
      • #
        ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۲۸ تیر ۱۳۹۱، ساعت ۰۴:۳۰
        جستجو که در سایت همکنون هست، از همین کتابخانه استفاده میکنه یا توسعه داده شده؟
        یه سوال شاید بی‌ربط. در آنالیز نتایج شاخص‌های لوسین ضریبی غیر از تعداد دفعات تکرار شاخص مد نظر هست؟
        • #
          ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۲۸ تیر ۱۳۹۱، ساعت ۰۴:۵۶
          - از کتابخانه اصلی lucene.net استفاده شده.
          - توضیحات مفصلش رو می‌تونید اینجا مطالعه کنید.
          • #
            ‫۱۱ سال و ۱۲ ماه قبل، دوشنبه ۱۰ مهر ۱۳۹۱، ساعت ۱۷:۰۶
            مهندس پیشنیاز اجرای Luke در ویندوز 7 چی؟
             این آدرس لینک کلی کامپوننت برای دانلود گذاشته
            • #
              ‫۱۱ سال و ۱۲ ماه قبل، دوشنبه ۱۰ مهر ۱۳۹۱، ساعت ۱۷:۰۹
              - فایل‌های jar نیاز به موتور اجرایی جاوا (JRE) دارند.
              - luke نسخه دات نتی هم دارد.
          • #
            ‫۱۱ سال و ۱۲ ماه قبل، چهارشنبه ۱۲ مهر ۱۳۹۱، ساعت ۱۸:۵۹
            ممنون برای من خیلی مورد استفاده بوده
  • #
    ‫۱۱ سال و ۱۲ ماه قبل، چهارشنبه ۱۲ مهر ۱۳۹۱، ساعت ۱۸:۵۵
    واقعا کتابخانه سریعی هستش برای کاری که من داشتم نزدیک به 16 هزار رکود 10 فیلدی رو توی لوسین ایندکس کرد که برای دریافت نتایجش زمان خیلی کمتری رو گرفت.
    • #
      ‫۱۱ سال و ۱۲ ماه قبل، چهارشنبه ۱۲ مهر ۱۳۹۱، ساعت ۲۰:۵۶
      بله. اینقدر باکیفیت است که RavenDB برای سیستم جستجوی خودش از لوسین به صورت توکار استفاده می‌کنه.
  • #
    ‫۱۱ سال و ۱۲ ماه قبل، چهارشنبه ۱۲ مهر ۱۳۹۱، ساعت ۱۹:۰۷
    در مورد این تصویر کمی توضیح میدین که به کدوم بخش لوسین مربوطه ممنون


    • #
      ‫۱۱ سال و ۱۲ ماه قبل، چهارشنبه ۱۲ مهر ۱۳۹۱، ساعت ۲۰:۴۱
      این عدد درصد نزدیک بودن جواب به جستجوی انجام شده است (رتبه جستجوی لوسین). فرمول محاسبه آن به صورت زیر است:
      var hits = searcher.Search(query, 10).ScoreDocs;
      var scoreNorm = 100.0f / hits.GetMaxScore();
      foreach (var scoreDoc in hits)
      {
         var resultScore = scoreNorm * scoreDoc.score;
      }

  • #
    ‫۱۱ سال و ۱۲ ماه قبل، جمعه ۱۴ مهر ۱۳۹۱، ساعت ۰۲:۳۵
    آیا برای صفحه بندی معادلی برای skip و  take وجود داره، با توجه به جستجویی که من انجام دادم ( + و + و + و + و + و + و + و + ) نمونه‌ای دال بر وجود یک همچین امکانی ندیدم.
    • #
      ‫۱۱ سال و ۱۲ ماه قبل، جمعه ۱۴ مهر ۱۳۹۱، ساعت ۰۳:۰۵
      - سؤال شما مرتبط با بحث Luke نیست.
      - و ... نداره. هر بار باید جستجو کنید. بعد روی نتیجه حاصل صفحه بندی رو انجام بدید. یا می‌تونید نتیجه جستجوی خاص انجام شده رو کش کنید تا سربار جستجوی مجدد حذف شود. (هرچند اینقدر سریع است که نیازی به کش نیست)
      • #
        ‫۱۱ سال و ۱۲ ماه قبل، جمعه ۱۴ مهر ۱۳۹۱، ساعت ۲۳:۱۴
        بابت پاسختون ممنونم
  • #
    ‫۵ سال و ۱۰ ماه قبل، شنبه ۵ آبان ۱۳۹۷، ساعت ۱۹:۵۹
    چرا پوشه Lucene رو انتخاب میکنیم خطا رخ میده؟

    از اخرین نسخه لوسین استفاده میکنم؟

    • #
      ‫۵ سال و ۱۰ ماه قبل، شنبه ۵ آبان ۱۳۹۷، ساعت ۲۳:۲۱
      داخل پوشه‌ی لوسین شما چنین فایل‌هایی موجود هستند؟

      • #
        ‫۵ سال و ۱۰ ماه قبل، یکشنبه ۶ آبان ۱۳۹۷، ساعت ۱۳:۳۷
        این فایل‌ها داخل فولدر هست
        ممنون میشم راهنمایی کنید سپاس

        • #
          ‫۵ سال و ۱۰ ماه قبل، یکشنبه ۶ آبان ۱۳۹۷، ساعت ۱۳:۵۷
          با استفاده از lukeall-3.5.0.jar ، مشکلی مشاهده نشد (لوسین دات نت، با نگارش 3x لوسین اصلی تطابق دارد):