Made catalog filtering by query diacritics insensitive

Catalog filtering by titles/description was sensitive to diacritics
present in the query string. Fixed that.

Also enhanced the unit test to validate the insensitivity to diacritics
present in either the title/description or the query string.
This commit is contained in:
Veloman Yunkan 2021-04-13 23:04:35 +04:00
parent 9c7366890d
commit 87dc9d2723
2 changed files with 21 additions and 1 deletions

View File

@ -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)

View File

@ -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",