解决首次索引后,重启后无法搜索部分文件的问题

This commit is contained in:
iaom 2022-12-05 15:58:33 +08:00 committed by 纪笑旭
parent f2236096b3
commit 15c4331da8
7 changed files with 17 additions and 10 deletions

View File

@ -29,13 +29,12 @@ BasicIndexer::BasicIndexer(const QString& filePath): m_filePath(filePath)
bool BasicIndexer::index()
{
QFileInfo info = QFileInfo(m_filePath);
//添加数据
m_document.setData(m_filePath);
//唯一term
m_document.setUniqueTerm(FileUtils::makeDocUterm(m_filePath));
//上层文件夹term用于在上层文件夹删除时删除自己
m_document.addTerm(FileUtils::makeDocUterm(m_filePath.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
m_document.addTerm("PARENTTERM" + FileUtils::makeDocUterm(m_filePath.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
//1-目录, 0-文件
m_document.addValue(1, QString((info.isDir() && (!info.isSymLink())) ? "1" : "0"));
//修改时间

View File

@ -51,7 +51,7 @@ bool fileContentIndexer::index()
term.shrink_to_fit();
m_document.setUniqueTerm(FileUtils::makeDocUterm(m_filePath));
m_document.addTerm(FileUtils::makeDocUterm(m_filePath.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
m_document.addTerm("PARENTTERM" + FileUtils::makeDocUterm(m_filePath.section("/", 0, -2, QString::SectionIncludeLeadingSep)));
m_document.addValue(1, m_filePath);
m_document.addValue(2, suffix);
m_document.setIndexTime(info.lastModified().toString("yyyyMMddHHmmsszzz"));

View File

@ -141,7 +141,6 @@ void FirstRunIndexer::basicIndex()
qDebug() << indexTimes.size() << "documents need remove.";
for(std::string uniqueTerm : indexTimes.keys()) {
basicDb.removeDocument(uniqueTerm);
basicDb.setMetaData(uniqueTerm, "");
}
basicDb.commit();
}
@ -231,7 +230,6 @@ void FirstRunIndexer::contentIndex()
qDebug() << indexTimes.size() << "documents need remove";
for(std::string uniqueTerm : indexTimes.keys()) {
contentDb.removeDocument(uniqueTerm);
contentDb.setMetaData(uniqueTerm, "");
}
contentDb.commit();
}

View File

@ -133,7 +133,7 @@ FirstRunIndexer::Targets IndexScheduler::checkAndRebuild()
&& m_config->isFileIndexEnable()) {
qDebug() << "Content database need rebuild";
target |= FirstRunIndexer::Target::Content;
m_statusRecorder->setStatus(INDEX_DATABASE_STATE_KEY, IndexStatusRecorder::State::Initializing);
m_statusRecorder->setStatus(CONTENT_INDEX_DATABASE_STATE_KEY, IndexStatusRecorder::State::Initializing);
}
startIndexJob(mode, target);
return target;

View File

@ -45,6 +45,9 @@ void IndexUpdater::UpdateIndex()
if(file.shouldRemoveIndex()) {
qDebug() << "| remove:" <<file.path();
basicDb.removeDocument(file.path());
if(file.isDir()) {
basicDb.removeChildrenDocument(file.path());
}
} else {
qDebug() << "| index:" <<file.path();
BasicIndexer indexer(file.path());
@ -80,12 +83,12 @@ void IndexUpdater::UpdateIndex()
if(file.shouldRemoveIndex()) {
qDebug() << "| remove:" <<file.path();
if(file.isDir()) {
contentDb.removeDocument(file.path());
contentDb.removeChildrenDocument(file.path());
} else if(true == suffixMap[suffix]) {
contentDb.removeDocument(file.path());
}
} else if(true == suffixMap[suffix] && !file.isDir()) {
if(FileUtils::isEncrypedOrUnsupport(file.path(), suffix)) {
if(FileUtils::isEncrypedOrUnsupport(file.path(), suffix) && file.isModified()) {
contentDb.removeDocument(file.path());
continue;
}

View File

@ -74,7 +74,7 @@ bool WritableDatabase::open()
}
QDir database(m_path);
if(!database.exists()) {
qDebug() << "Create basic writable database" << m_path<< database.mkpath(m_path);
qDebug() << "Create writable database" << m_path<< database.mkpath(m_path);
}
try {
m_xpDatabase = new Xapian::WritableDatabase(m_path.toStdString(), Xapian::DB_CREATE_OR_OPEN);
@ -145,7 +145,13 @@ void WritableDatabase::removeDocument(const QString &path)
void WritableDatabase::removeDocument(const std::string uniqueTerm)
{
DATABASE_TRY(m_xpDatabase->delete_document(uniqueTerm);)
DATABASE_TRY(m_xpDatabase->delete_document(uniqueTerm);
m_xpDatabase->set_metadata(uniqueTerm, "");)
}
void WritableDatabase::removeChildrenDocument(const QString &path)
{
DATABASE_TRY(m_xpDatabase->delete_document("PARENTTERM" + FileUtils::makeDocUterm(path));)
}
void WritableDatabase::setMetaData(const QString &key, const QString &value)

View File

@ -46,6 +46,7 @@ public:
void addDocument(const Document& doc);
void removeDocument(const QString& path);
void removeDocument(const std::string uniqueTerm);
void removeChildrenDocument(const QString& path);
void setMetaData(const QString& key, const QString& value);
void setMetaData(const std::string& key, const std::string& value);
const std::string getMetaData(const std::string &key);