Fuse
Fuse copied to clipboard
Add option to ignore diacritics
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.
Is this a feature that would be welcome by the maintainers but there's not enough capacity to implement it? If so, I would be happy to take a look and try to submit a patch myself.
This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days
This still appears to be a problem and I'm still open to collaboration.
Would love to see this option...