-
-
Notifications
You must be signed in to change notification settings - Fork 804
Description
Description
I'd find it extremely useful if Fuse had the ability to ignore diacritics/accents both in the search string and in the indexed content. However, I don't want to lose the diacritics completely, i.e. I want the diacritics to appear in the search results for the matched items.
Based on the comments in a previous issue (#415), I have implemented a quick prototype (see below), but it falls short of being usable: the getter strips the diacritics and it's impossible to recover them from the results. (See below for an illustration.)
Describe the solution you'd like
Have a configuration option like ignoreAccents: boolean, disabled by default, that would toggle this functionality.
Describe alternatives you've considered
I have read through #415 and implemented a prototype in our app, but it has the problem of losing the diacritics. The implementation basically boils down to stripping diacritics from the search string and a custom getter which does the same to the content:
// Code by Mathieu TUDISCO via GitHub:
// https://github.com/krisk/Fuse/issues/415#issuecomment-634348136
const stripAccents = String.prototype.normalize
? ((str) => str.normalize('NFD').replace(/[\u0300-\u036F]/g, ''))
: ((str) => str);
const options = {
// ...
getFn: (obj, path) => stripAccents(Fuse.config.getFn(obj, path)),
includeMatches: true,
// ...
};
const fuse = new Fuse(data, options);
const searchResults = fuse.search(stripAccents(this.searchString));To illustrate the problem, see the screenshot below. The title of the first two items should be “Lesnatost v přírodních lesních oblastech” and “Proč dnes příroda tak rychle přichází o svou rozmanitost?”, respectively, but the diacritics are stripped by the getter and they cannot be recovered.
