diff --git a/INSTALL-LINUX b/INSTALL-LINUX index b17221be9..d56663f95 100644 --- a/INSTALL-LINUX +++ b/INSTALL-LINUX @@ -408,7 +408,7 @@ any 0.9 branch should work fine, let us know if you experience any issues. You m that the libclucene0ldbl runtime is already installed, this is fine and typical since clucene is a very popular search library. -$ sudo apt-get install clucene-core +$ sudo apt-get install libclucene-dev $ sudo apt-get install libclucene0ldbl By default, and this is deliberate, the clucene install places the config headers into diff --git a/src/Lucene.cpp b/src/Lucene.cpp index 9fa8f933d..9e565ffbd 100644 --- a/src/Lucene.cpp +++ b/src/Lucene.cpp @@ -35,7 +35,7 @@ Lucene::Lucene(MainWindow *parent) : QObject(parent), main(parent) main->home.mkdir("index"); // make index directory if needed - QDir dir(main->home.canonicalPath() + "/index"); + dir = QDir(main->home.canonicalPath() + "/index"); try { @@ -54,9 +54,6 @@ Lucene::Lucene(MainWindow *parent) : QObject(parent), main(parent) delete create; } - // now lets open using a mnodifier since the API is much simpler - writer = new IndexWriter(dir.canonicalPath().toLocal8Bit().data(), &analyzer, false); // for updates - } catch (CLuceneError &e) { qDebug()<<"clucene error!"<flush(); - writer->close(); - //XXXdelete writer; Causes a SEGV !? - } catch(CLuceneError &e) {} } bool Lucene::importRide(SummaryMetrics *, RideFile *ride, QColor , unsigned long, bool) @@ -99,7 +90,17 @@ bool Lucene::importRide(SummaryMetrics *, RideFile *ride, QColor , unsigned long deleteRide(ride->getTag("Filename", "")); // now add to index - try { writer->addDocument(&doc); } catch (CLuceneError &e) {} + try { + + // now lets open using a mnodifier since the API is much simpler + IndexWriter *writer = new IndexWriter(dir.canonicalPath().toLocal8Bit().data(), &analyzer, false); // for updates + writer->addDocument(&doc); + writer->close(); + delete writer; + + } catch (CLuceneError &e) { + qDebug()<<"add document clucene error!"<deleteDocuments(new Term(_T("Filename"), cname.c_str())); } catch (CLuceneError &e) {} + try { + + IndexReader *reader = IndexReader::open(dir.canonicalPath().toLocal8Bit().data()); + reader->deleteDocuments(new Term(_T("Filename"), cname.c_str())); + reader->close(); + delete reader; + + } catch (CLuceneError &e) { + qDebug()<<"deleteDocuments clucene error!"<flush(); + + IndexWriter *writer = new IndexWriter(dir.canonicalPath().toLocal8Bit().data(), &analyzer, false); // for updates writer->optimize(); - } catch(CLuceneError &e) {} + writer->close(); + delete writer; + + } catch(CLuceneError &e) { + qDebug()<<"optimise clucene error!"<getDirectory()); // for querying against - searcher = new IndexSearcher(reader); // to perform searches + IndexReader *reader = IndexReader::open(dir.canonicalPath().toLocal8Bit().data()); + IndexSearcher *searcher = new IndexSearcher(reader); // to perform searches // go find hits hits = searcher->search(lquery); filenames.clear(); - for (unsigned int i=0; i< hits->length(); i++) { + for (int i=0; i< hits->length(); i++) { Document *d = &hits->doc(i); filenames << QString::fromWCharArray(d->get(_T("Filename"))); } + searcher->close(); + reader->close(); + delete hits; delete lquery; delete searcher; diff --git a/src/Lucene.h b/src/Lucene.h index a17fb5883..19e2e66dc 100644 --- a/src/Lucene.h +++ b/src/Lucene.h @@ -63,12 +63,10 @@ signals: private: MainWindow *main; + QDir dir; // CLucene objects SimpleAnalyzer analyzer; - IndexWriter* writer; - IndexReader* reader; - IndexSearcher* searcher; // Query results Hits *hits; // null when no results