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



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



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



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



  • 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}. امیدوارم کد های که براتون نوشتم مفید باشه .



  • 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);



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

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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.