diff --git a/src/index/indexer.cpp b/src/index/indexer.cpp index dc893f8e..ff336cb3 100644 --- a/src/index/indexer.cpp +++ b/src/index/indexer.cpp @@ -140,14 +140,17 @@ bool ConfIndexer::index(bool resetbefore, ixType typestorun, int flags) if (m_updater && !m_updater->update(DbIxStatus::DBIXS_CLOSING, string())) return false; - createStemmingDatabases(); + bool ret = true; + if (!createStemmingDatabases()) { + ret = false; + } if (m_updater && !m_updater->update(DbIxStatus::DBIXS_CLOSING, string())) return false; - createAspellDict(); + ret = ret && createAspellDict(); clearMimeHandlerCache(); if (m_updater) m_updater->update(DbIxStatus::DBIXS_DONE, string()); - return true; + return ret; } bool ConfIndexer::indexFiles(list& ifiles, int flag) @@ -276,6 +279,7 @@ bool ConfIndexer::purgeFiles(std::list &files, int flag) bool ConfIndexer::createStemmingDatabases() { string slangs; + bool ret = true; if (m_config->getConfParam("indexstemminglanguages", slangs)) { if (!m_db.open(Rcl::Db::DbUpd)) { LOGERR("ConfIndexer::createStemmingDb: could not open db\n" ); @@ -292,10 +296,10 @@ bool ConfIndexer::createStemmingDatabases() if (find(langs.begin(), langs.end(), *it) == langs.end()) m_db.deleteStemDb(*it); } - m_db.createStemDbs(langs); + ret = ret && m_db.createStemDbs(langs); } m_db.close(); - return true; + return ret; } bool ConfIndexer::createStemDb(const string &lang) diff --git a/src/rcldb/expansiondbs.cpp b/src/rcldb/expansiondbs.cpp index 04f60b48..a5b9bd9b 100644 --- a/src/rcldb/expansiondbs.cpp +++ b/src/rcldb/expansiondbs.cpp @@ -53,40 +53,40 @@ bool createExpansionDbs(Xapian::WritableDatabase& wdb, return true; } - // Stem dbs - vector stemdbs; - // Note: tried to make this to work with stack-allocated objects, couldn't. - // Looks like a bug in copy constructors somewhere, can't guess where - vector > stemmers; - for (unsigned int i = 0; i < langs.size(); i++) { - stemmers.push_back(std::shared_ptr - (new SynTermTransStem(langs[i]))); - stemdbs.push_back( - XapWritableComputableSynFamMember(wdb, synFamStem, langs[i], - stemmers.back().get())); - stemdbs.back().recreate(); - } - - // Unaccented stem dbs - vector unacstemdbs; - // We can reuse the same stemmer pointers, the objects are stateless. - if (!o_index_stripchars) { - for (unsigned int i = 0; i < langs.size(); i++) { - unacstemdbs.push_back( - XapWritableComputableSynFamMember(wdb, synFamStemUnac, langs[i], - stemmers.back().get())); - unacstemdbs.back().recreate(); - } - } - SynTermTransUnac transunac(UNACOP_UNACFOLD); - XapWritableComputableSynFamMember - diacasedb(wdb, synFamDiCa, "all", &transunac); - if (!o_index_stripchars) - diacasedb.recreate(); - // Walk the list of all terms, and stem/unac each. string ermsg; try { + // Stem dbs + vector stemdbs; + // Note: tried to make this to work with stack-allocated objects, couldn't. + // Looks like a bug in copy constructors somewhere, can't guess where + vector > stemmers; + for (unsigned int i = 0; i < langs.size(); i++) { + stemmers.push_back(std::shared_ptr + (new SynTermTransStem(langs[i]))); + stemdbs.push_back( + XapWritableComputableSynFamMember(wdb, synFamStem, langs[i], + stemmers.back().get())); + stemdbs.back().recreate(); + } + + // Unaccented stem dbs + vector unacstemdbs; + // We can reuse the same stemmer pointers, the objects are stateless. + if (!o_index_stripchars) { + for (unsigned int i = 0; i < langs.size(); i++) { + unacstemdbs.push_back( + XapWritableComputableSynFamMember(wdb, synFamStemUnac, langs[i], + stemmers.back().get())); + unacstemdbs.back().recreate(); + } + } + SynTermTransUnac transunac(UNACOP_UNACFOLD); + XapWritableComputableSynFamMember + diacasedb(wdb, synFamDiCa, "all", &transunac); + if (!o_index_stripchars) + diacasedb.recreate(); + Xapian::TermIterator it = wdb.allterms_begin(); // We'd want to skip to the first non-prefixed term, but this is a bit // complicated, so we just jump over most of the prefixed term and then