diff --git a/libsearch/searchinterface/searchtasks/file-search-task.cpp b/libsearch/searchinterface/searchtasks/file-search-task.cpp index 8a870af..a17e11f 100644 --- a/libsearch/searchinterface/searchtasks/file-search-task.cpp +++ b/libsearch/searchinterface/searchtasks/file-search-task.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "index-status-recorder.h" #include "dir-watcher.h" #include "common.h" @@ -178,10 +179,17 @@ Xapian::Query FileSearchWorker::creatQueryForFileSearch() { for (QString &keyword : m_searchController->getKeyword()) { if (!keyword.isEmpty()) { std::vector queryOfKeyword; - for(auto &c : keyword) { - queryOfKeyword.emplace_back(Xapian::Query(QUrl::toPercentEncoding(c).toStdString())); + QString inputKeyWord = keyword.toLower(); + QTextBoundaryFinder bf(QTextBoundaryFinder::Grapheme, inputKeyWord.toLower()); + int start = 0; + for(; bf.position() != -1; bf.toNextBoundary()) { + int end = bf.position(); + if(bf.boundaryReasons() & QTextBoundaryFinder::EndOfItem) { + queryOfKeyword.emplace_back(QUrl::toPercentEncoding(inputKeyWord.toLower().mid(start, end - start)).toStdString()); + } + start = end; } - queries.emplace_back(Xapian::Query(Xapian::Query::OP_PHRASE, queryOfKeyword.begin(), queryOfKeyword.end())); + queries.emplace_back(Xapian::Query::OP_PHRASE, queryOfKeyword.begin(), queryOfKeyword.end()); } }