Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Call for Presentations - Qt World Summit

    [SOLVED]CLucene راهنمای برای استفاده از

    Persian
    2
    6
    2554
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hdeldar last edited by

      p{direction: rtl; text-align: right}. راهنمایی در مورد استفاده از کتابخانه QtCLucene می خواستم.آیا کسی از دوستان با این کتابخانه کار کرده ؟ برنامه نمونه یا فقط فایل .pro آن رو هم به اشتراک بزارند ممنون میشم.من الان با این کتابخانه با یک روش نامعقولی کار می کنم یعنی تمام فایل های cpp را به پروژه اضافه کردم .آیا میشه فقط از فایل لایب .a اون استفاده کرد؟

      1 Reply Last reply Reply Quote 0
      • H
        hdeldar last edited by

        p{direction:rtl; text-align:right}. راهی که من مشکلم رو باهاش حل کردم گرفتن سورس کد اصلی CLucene بود و بیلد اون با mingw32-make با این راه مشکلم حل شد و الان هم دارم از کتابخانه های که ساختم به خوبی استفاده می کنم.

        1 Reply Last reply Reply Quote 0
        • H
          hosein last edited by

          p{direction:rtl; text-align:right}. سلام میتونی یه نمونه سورسی از برنامه ای نوشتی برام بفرستی
          راستش من هنوز دقیق نمیدونم این CLuceneچطوری کار میکنه وهمینطور چطوری ایندکس و جستجو میکنه

          1 Reply Last reply Reply Quote 0
          • H
            hdeldar last edited by

            p{direction:rtl; text-align:right}. دوست عزیز سلام بعد از اینکه سرورس کد CLucene رو ساختید و کتابخانه هاش آماده شد توی فایل .Pro مسیر هاش رو بشکل زیر به برنامه اضافه کنید :
            @
            INCLUDEPATH += "<مسیر کتابخانه ساخته شده در سیستم خودتان>/clucene/include"
            LIBS += -L"<مسیر کتابخانه ساخته شده در سیستم خودتان>/clucene/lib"
            LIBS += -lclucene-core
            LIBS += -lclucene-shared@

            p{direction:rtl; text-align:right}. در اول فایلی که می خواهید استفاده کنید فایل هدررو اضافه کنید :
            @#include <CLucene.h>
            #include <QFile>
            #include <QFileInfo>
            #include <QDebug>

            using namespace lucene::index;
            using namespace lucene::analysis;
            using namespace lucene::util;
            using namespace lucene::store;
            using namespace lucene::document;
            using namespace lucene::search;
            using namespace lucene::queryParser;@

            p{direction:rtl; text-align:right}. برای ایندکس زدن فایلهای دلخواه بشکل زیر عمل می کنیم :
            @ WhitespaceAnalyzer an ;
            IndexWriter *writer = new IndexWriter("luceneIndex", &an, true);

                    QFile file&#40;"test1.txt"&#41;;
                    file.open(QIODevice::ReadWrite&#41;;
                    QString content(file.readAll(&#41;);
                    file.close();
            
                    Document doc;
                    doc.add(*new Field(_T("path"), QFileInfo("test1.txt").absolutePath().toStdWString().c_str(), Field::STORE_YES | Field::INDEX_UNTOKENIZED));
                    doc.add(*new Field(_T("contents"), content.toStdWString().c_str() , Field::STORE_YES | Field::INDEX_TOKENIZED));
            
                    writer->addDocument( &doc );
            
                    file.setFileName("test2.txt");
                    file.open(QIODevice::ReadWrite);
                    content = QString(file.readAll());
                    file.close();
            
                    doc.clear();
                    doc.add(*new Field(_T("path"), QFileInfo("test2.txt").absolutePath().toStdWString().c_str(), Field::STORE_YES | Field::INDEX_UNTOKENIZED));
                    doc.add(*new Field(_T("contents"), content.toStdWString().c_str() , Field::STORE_YES | Field::INDEX_TOKENIZED));
            
                    writer->addDocument( &doc );
                    writer->close();@
            

            p{direction:rtl; text-align:right}. و در آخر برای جستجوی عبارت مد نظر به روش زیر عمل می کنیم:

            @ WhitespaceAnalyzer an ;
            Query * m_pQuery = QueryParser::parse(L"DEFINES", L"contents", &an);
            IndexSearcher searcher("luceneIndex");
            Hits * m_pHits = searcher.search(m_pQuery);
            qDebug() << m_pHits->length();

                    for(int indx = 0; indx <  m_pHits->length(); indx++)
                    {
                        DocumentFieldEnumeration* pocFields;
            
                         pocFields = m_pHits -> doc( indx ).fields();
                        //float socre = m_pHits->score(indx);
            
                        while( pocFields->hasMoreElements() )
                        {
                           Field* pocField = pocFields->nextElement();
                           const TCHAR* fieldValue = pocField->stringValue();
                           const TCHAR* fieldName = pocField->name();
                           qDebug() << QString::fromWCharArray(fieldName) << " = " <<  QString::fromWCharArray(fieldValue) ;
                        }
            
                    }@
            

            p{direction:rtl; text-align:right}. امیدوارم کد های که براتون نوشتم مفید باشه .

            1 Reply Last reply Reply Quote 0
            • H
              hosein last edited by

              p{direction:rtl; text-align:right}. با تشکر از لطف شما دوست عزیز
              از کدتون استفاده کردم و خیلی مفید بود
              البته برا جستجوی فارسی مشکل داشت
              ضمن اینکه خواستم برا اینکه جستجو پویا باشه کدتون رو به این شکل زیر تغییر دادم اما کار نکرد

              WhitespaceAnalyzer an ;
              QString str = QString("L""+ui->lineEdit->text()+""");
              TCHAR *tchar = new TCHAR[str.length()+1];
              str.toWCharArray(tchar);
              tchar[str.length()] = 0;
              Query * m_pQuery = QueryParser::parse(L"DEFINES", tchar, &an);

              1 Reply Last reply Reply Quote 0
              • H
                hdeldar last edited by

                p{direction:rtl; text-align:right}. خواهش می کنم .خوب خط دوم به شکل زیر باشه فکر نمی کنم مشکلی باشه:

                @QString str = ui->lineEdit->text();@

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post