mirror of https://github.com/kiwix/libkiwix.git
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:
parent
9c7366890d
commit
87dc9d2723
|
@ -350,10 +350,11 @@ Xapian::Query buildXapianQueryFromFilterQuery(const Filter& filter)
|
||||||
//queryParser.set_stemming_strategy(Xapian::QueryParser::STEM_SOME);
|
//queryParser.set_stemming_strategy(Xapian::QueryParser::STEM_SOME);
|
||||||
const auto flags = Xapian::QueryParser::FLAG_PHRASE
|
const auto flags = Xapian::QueryParser::FLAG_PHRASE
|
||||||
| Xapian::QueryParser::FLAG_BOOLEAN
|
| Xapian::QueryParser::FLAG_BOOLEAN
|
||||||
|
| Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE
|
||||||
| Xapian::QueryParser::FLAG_LOVEHATE
|
| Xapian::QueryParser::FLAG_LOVEHATE
|
||||||
| Xapian::QueryParser::FLAG_WILDCARD
|
| Xapian::QueryParser::FLAG_WILDCARD
|
||||||
| partialQueryFlag;
|
| partialQueryFlag;
|
||||||
return queryParser.parse_query(filter.getQuery(), flags);
|
return queryParser.parse_query(normalizeText(filter.getQuery()), flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
Xapian::Query nameQuery(const std::string& name)
|
Xapian::Query nameQuery(const std::string& name)
|
||||||
|
|
|
@ -436,12 +436,31 @@ TEST_F(LibraryTest, filterByQuery)
|
||||||
"Mythology & Folklore Stack Exchange"
|
"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
|
// filtering by query is case insensitive on description/summary
|
||||||
EXPECT_FILTER_RESULTS(kiwix::Filter().query("enTHUSiaSTS"),
|
EXPECT_FILTER_RESULTS(kiwix::Filter().query("enTHUSiaSTS"),
|
||||||
"Movies & TV Stack Exchange",
|
"Movies & TV Stack Exchange",
|
||||||
"Mythology & Folklore 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
|
// by default, filtering by query assumes partial query
|
||||||
EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki"),
|
EXPECT_FILTER_RESULTS(kiwix::Filter().query("Wiki"),
|
||||||
"Encyclopédie de la Tunisie",
|
"Encyclopédie de la Tunisie",
|
||||||
|
|
Loading…
Reference in New Issue