diff --git a/autotests/integration/querytest.cpp b/autotests/integration/querytest.cpp --- a/autotests/integration/querytest.cpp +++ b/autotests/integration/querytest.cpp @@ -118,7 +118,6 @@ TermGenerator tg(doc); tg.indexText(text); tg.indexFileNameText(fileName); - tg.indexFileNameText(fileName, QByteArrayLiteral("F")); doc.setId(id); doc.setMTime(1); doc.setCTime(2); @@ -132,7 +131,6 @@ TermGenerator tg(doc); tg.indexFileNameText(newName); - tg.indexFileNameText(newName, QByteArrayLiteral("F")); doc.setId(id); tr->replaceDocument(doc, FileNameTerms); @@ -249,14 +247,19 @@ const QString& failureReason) { QTest::addRow("%s", name) << phrase << contentMatches << filenameMatches << failureReason; }; + // Content matches addRow("Crazy dog", {"crazy", "dog"}, SortedIdVector{ m_id1 }, {}, ""); addRow("Lazy dog", {"lazy", "dog"}, SortedIdVector{ m_id7 }, {}, ""); addRow("Brown fox", {"brown", "fox"}, SortedIdVector{ m_id1, m_id7, m_id8 }, {}, ""); - addRow("Crazy dog file 1", {"file1"}, SortedIdVector{ m_id1 }, SortedIdVector{ m_id1 }, ""); - addRow("Crazy dog file 2", {"file1", "txt"}, SortedIdVector{ m_id1 }, SortedIdVector{ m_id1 }, ""); - addRow("Lazy dog file 1", {"file7"}, SortedIdVector{ m_id7 }, SortedIdVector{ m_id7 }, ""); - addRow("Lazy dog file 2", {"file7", "lazy"}, SortedIdVector{ m_id7 }, SortedIdVector{ m_id7 }, "Content shadows filename"); - addRow("Lazy dog file 3", {"dog"}, SortedIdVector{ m_id1, m_id7, m_id8 }, SortedIdVector{ m_id8 }, "Filename shadows content"); + addRow("Dog", {"dog"}, SortedIdVector{ m_id1, m_id7, m_id8 }, {}, ""); + // Filename matches + addRow("Crazy dog file 1", {"file1"}, {}, SortedIdVector{ m_id1 }, ""); + addRow("Crazy dog file 2", {"file1", "txt"}, {}, SortedIdVector{ m_id1 }, ""); + addRow("Lazy dog file 1", {"file7"}, {}, SortedIdVector{ m_id7 }, ""); + addRow("Lazy dog file 2", {"file7", "lazy"}, {}, SortedIdVector{ m_id7 }, ""); + // Matches content and filename + addRow("Lazy both", {"lazy"}, { m_id7 }, { m_id7 }, ""); + addRow("Easy both", {"easy"}, { m_id8 }, { m_id8 }, ""); } void QueryTest::testTermPhrase() @@ -277,6 +280,15 @@ QEXPECT_FAIL("", qPrintable(failReason), Continue); } QCOMPARE(tr.exec(q), contentMatches); + + queries.clear(); + const QByteArray fPrefix = QByteArrayLiteral("F"); + for (QByteArray term : phrase) { + term = fPrefix + term; + queries << EngineQuery(term); + } + EngineQuery qf(queries, EngineQuery::Phrase); + QCOMPARE(tr.exec(qf), filenameMatches); } void QueryTest::testTagTermAnd_data() diff --git a/src/engine/termgenerator.h b/src/engine/termgenerator.h --- a/src/engine/termgenerator.h +++ b/src/engine/termgenerator.h @@ -42,7 +42,6 @@ void indexXattrText(const QString& text, const QByteArray& prefix); void indexFileNameText(const QString& text); - void indexFileNameText(const QString& text, const QByteArray& prefix); void setPosition(int position); int position() const; diff --git a/src/engine/termgenerator.cpp b/src/engine/termgenerator.cpp --- a/src/engine/termgenerator.cpp +++ b/src/engine/termgenerator.cpp @@ -98,8 +98,9 @@ m_position++; } -void TermGenerator::indexFileNameText(const QString& text, const QByteArray& prefix) +void TermGenerator::indexFileNameText(const QString& text) { + const QByteArray prefix = QByteArrayLiteral("F"); const QByteArrayList terms = termList(text); if (terms.size() == 1) { QByteArray finalArr = prefix + terms[0]; @@ -115,11 +116,6 @@ m_position++; } -void TermGenerator::indexFileNameText(const QString& text) -{ - indexFileNameText(text, QByteArray()); -} - void TermGenerator::indexXattrText(const QString& text, const QByteArray& prefix) { const QByteArrayList terms = termList(text); diff --git a/src/file/basicindexingjob.cpp b/src/file/basicindexingjob.cpp --- a/src/file/basicindexingjob.cpp +++ b/src/file/basicindexingjob.cpp @@ -192,7 +192,6 @@ TermGenerator tg(doc); tg.indexFileNameText(fileName); - tg.indexFileNameText(fileName, QByteArray("F")); tg.indexText(m_mimetype, QByteArray("M")); // (Content) Modification time, Metadata (e.g. XAttr) change time diff --git a/src/lib/searchstore.cpp b/src/lib/searchstore.cpp --- a/src/lib/searchstore.cpp +++ b/src/lib/searchstore.cpp @@ -309,6 +309,10 @@ Q_ASSERT(0); return nullptr; } + } else if (property == "") { + Term cterm(QStringLiteral("content"), term.value(), term.comparator()); + Term fterm(QStringLiteral("filename"), term.value(), term.comparator()); + return constructQuery(tr, Term{cterm, Term::Operation::Or, fterm}); } QByteArray prefix;