diff --git a/src/library.cpp b/src/library.cpp index 25d08a858..4f3b58754 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -350,10 +350,11 @@ Xapian::Query buildXapianQueryFromFilterQuery(const Filter& filter) //queryParser.set_stemming_strategy(Xapian::QueryParser::STEM_SOME); const auto flags = Xapian::QueryParser::FLAG_PHRASE | Xapian::QueryParser::FLAG_BOOLEAN + | Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE | Xapian::QueryParser::FLAG_LOVEHATE | Xapian::QueryParser::FLAG_WILDCARD | partialQueryFlag; - return queryParser.parse_query(filter.getQuery(), flags); + return queryParser.parse_query(normalizeText(filter.getQuery()), flags); } Xapian::Query nameQuery(const std::string& name) diff --git a/test/library.cpp b/test/library.cpp index e48564b32..209be4a87 100644 --- a/test/library.cpp +++ b/test/library.cpp @@ -436,12 +436,31 @@ TEST_F(LibraryTest, filterByQuery) "Mythology & Folklore Stack Exchange" ); + // filtering by query is diacritics insensitive on titles + EXPECT_FILTER_RESULTS(kiwix::Filter().query("mathematiques"), + "Mathématiques", + ); + EXPECT_FILTER_RESULTS(kiwix::Filter().query("èxchângé"), + "Islam Stack Exchange", + "Movies & TV Stack Exchange", + "Mythology & Folklore Stack Exchange" + ); + // filtering by query is case insensitive on description/summary EXPECT_FILTER_RESULTS(kiwix::Filter().query("enTHUSiaSTS"), "Movies & TV Stack Exchange", "Mythology & Folklore Stack Exchange" ); + // filtering by query is diacritics insensitive on description/summary + EXPECT_FILTER_RESULTS(kiwix::Filter().query("selection"), + "Géographie par Wikipédia" + ); + EXPECT_FILTER_RESULTS(kiwix::Filter().query("enthúsïåsts"), + "Movies & TV Stack Exchange", + "Mythology & Folklore Stack Exchange" + ); + // by default, filtering by query assumes partial query EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki"), "Encyclopédie de la Tunisie",