--- a/src/rcldb/rclterms.cpp
+++ b/src/rcldb/rclterms.cpp
@@ -164,8 +164,17 @@
bool diac_sensitive = (typ_sens & ET_DIACSENS) != 0;
bool case_sensitive = (typ_sens & ET_CASESENS) != 0;
-
- LOGDEB0("Db::TermMatch: typ " << (tmtptostr(matchtyp)) << " diacsens " << (diac_sensitive) << " casesens " << (case_sensitive) << " lang [" << (lang) << "] term [" << (_term) << "] max " << (max) << " field [" << (field) << "] stripped " << (o_index_stripchars) << " init res.size " << (res.entries.size()) << "\n" );
+ // Path elements (used for dir: filtering) are special because
+ // they are not unaccented or lowercased even if the index is
+ // otherwise stripped.
+ bool pathelt = (typ_sens & ET_PATHELT) != 0;
+
+ LOGDEB0("Db::TermMatch: typ " << tmtptostr(matchtyp) << " diacsens " <<
+ diac_sensitive << " casesens " << case_sensitive << " pathelt " <<
+ pathelt << " lang [" <<
+ lang << "] term [" << _term << "] max " << max << " field [" <<
+ field << "] stripped " << o_index_stripchars << " init res.size "
+ << res.entries.size() << "\n");
// If index is stripped, no case or diac expansion can be needed:
// for the processing inside this routine, everything looks like
@@ -174,8 +183,8 @@
string term = _term;
if (o_index_stripchars) {
diac_sensitive = case_sensitive = true;
- if (!unacmaybefold(_term, term, "UTF-8", UNACOP_UNACFOLD)) {
- LOGERR("Db::termMatch: unac failed for [" << (_term) << "]\n" );
+ if (!pathelt && !unacmaybefold(_term, term, "UTF-8", UNACOP_UNACFOLD)) {
+ LOGERR("Db::termMatch: unac failed for [" << _term << "]\n");
return false;
}
}