[SOLVED]CLucene راهنمای برای استفاده از
-
p{direction: rtl; text-align: right}. راهنمایی در مورد استفاده از کتابخانه QtCLucene می خواستم.آیا کسی از دوستان با این کتابخانه کار کرده ؟ برنامه نمونه یا فقط فایل .pro آن رو هم به اشتراک بزارند ممنون میشم.من الان با این کتابخانه با یک روش نامعقولی کار می کنم یعنی تمام فایل های cpp را به پروژه اضافه کردم .آیا میشه فقط از فایل لایب .a اون استفاده کرد؟
-
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("test1.txt"); file.open(QIODevice::ReadWrite); QString content(file.readAll()); 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);