Fuse icon indicating copy to clipboard operation
Fuse copied to clipboard

Add option to ignore diacritics

Open mgrabovsky opened this issue 1 year ago • 5 comments

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.

mgrabovsky avatar Jun 13 '23 18:06 mgrabovsky

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.

mgrabovsky avatar Jun 13 '23 19:06 mgrabovsky

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

github-actions[bot] avatar Oct 12 '23 00:10 github-actions[bot]

This still appears to be a problem and I'm still open to collaboration.

mgrabovsky avatar Oct 19 '23 10:10 mgrabovsky

Would love to see this option...

boydkelly avatar Feb 16 '24 21:02 boydkelly