Fix: Index error when process a whole dir.

This commit is contained in:
iaom 2021-09-07 17:11:23 +08:00
parent 70bb2c43b1
commit d216398c82
2 changed files with 13 additions and 6 deletions

View File

@ -54,12 +54,12 @@ void ConstructDocumentForPath::run() {
// } // }
QString uniqueterm = QString::fromStdString(FileUtils::makeDocUterm(sourcePath)); QString uniqueterm = QString::fromStdString(FileUtils::makeDocUterm(sourcePath));
QString upTerm = QString::fromStdString(FileUtils::makeDocUterm(sourcePath.section("/", 0, -2, QString::SectionIncludeLeadingSep))); QString upTerm = QString::fromStdString("ZEEKERUPTERM" + FileUtils::makeDocUterm(sourcePath.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
// qDebug()<<"sourcePath"<<sourcePath.section("/",0,-2,QString::SectionIncludeLeadingSep); // qDebug()<<"sourcePath"<<sourcePath.section("/",0,-2,QString::SectionIncludeLeadingSep);
// qDebug() << "sourcePath ---------------------------: " << sourcePath; // qDebug() << "sourcePath ---------------------------: " << sourcePath;
// qDebug() << "sourcePath.section -------------------: " << sourcePath.section("/",0,-2,QString::SectionIncludeLeadingSep); // qDebug() << "sourcePath.section -------------------: " << sourcePath.section("/",0,-2,QString::SectionIncludeLeadingSep);
// qDebug() << "ConstructDocumentForPath -- uniqueterm: " << uniqueterm; // qDebug() << "ConstructDocumentForPath -- uniqueterm: " << uniqueterm;
// qDebug() << "ConstructDocumentForPath -- upTerm: " << upTerm; // qDebug() << "ConstructDocumentForPath -- upTerm : " << upTerm;
doc.setData(sourcePath); doc.setData(sourcePath);
@ -115,7 +115,7 @@ void ConstructDocumentForContent::run() {
//doc.setUniqueTerm(uniqueterm); //doc.setUniqueTerm(uniqueterm);
doc.setUniqueTerm(FileUtils::makeDocUterm(m_path)); doc.setUniqueTerm(FileUtils::makeDocUterm(m_path));
//doc.addTerm(upTerm); //doc.addTerm(upTerm);
doc.addTerm(FileUtils::makeDocUterm(m_path.section("/", 0, -2, QString::SectionIncludeLeadingSep))); doc.addTerm("ZEEKERUPTERM" + FileUtils::makeDocUterm(m_path.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
doc.addValue(m_path); doc.addValue(m_path);
//'\xEF\xBC\x8C' is "" "\xE3\x80\x82" is "。" use three " " to replace ,to ensure the offset info. //'\xEF\xBC\x8C' is "" "\xE3\x80\x82" is "。" use three " " to replace ,to ensure the offset info.

View File

@ -456,20 +456,27 @@ bool IndexGenerator::deleteAllIndex(QStringList *pathlist) {
if(list->isEmpty()) if(list->isEmpty())
return true; return true;
try { try {
qDebug() << "--delete start--";
for(int i = 0; i < list->size(); i++) { for(int i = 0; i < list->size(); i++) {
QString doc = list->at(i); QString doc = list->at(i);
std::string uniqueterm = FileUtils::makeDocUterm(doc); std::string uniqueterm = FileUtils::makeDocUterm(doc);
qDebug() << "--delete start--"; std::string upterm = "ZEEKERUPTERM" + FileUtils::makeDocUterm(doc);
m_database_path->delete_document(uniqueterm); m_database_path->delete_document(uniqueterm);
m_database_content->delete_document(uniqueterm); m_database_content->delete_document(uniqueterm);
//delete all files under it if it's a dir.
m_database_path->delete_document(upterm);
m_database_content->delete_document(upterm);
qDebug() << "delete path" << doc; qDebug() << "delete path" << doc;
qDebug() << "delete md5" << QString::fromStdString(uniqueterm); // qDebug() << "delete md5" << QString::fromStdString(uniqueterm);
qDebug() << "--delete finish--";
// qDebug()<<"m_database_path->get_lastdocid()!!!"<<m_database_path->get_lastdocid(); // qDebug()<<"m_database_path->get_lastdocid()!!!"<<m_database_path->get_lastdocid();
// qDebug()<<"m_database_path->get_doccount()!!!"<<m_database_path->get_doccount(); // qDebug()<<"m_database_path->get_doccount()!!!"<<m_database_path->get_doccount();
} }
m_database_path->commit(); m_database_path->commit();
m_database_content->commit(); m_database_content->commit();
qDebug() << "--delete finish--";
} catch(const Xapian::Error &e) { } catch(const Xapian::Error &e) {
qWarning() << QString::fromStdString(e.get_description()); qWarning() << QString::fromStdString(e.get_description());
return false; return false;