Skip to content

Add option to ignore diacritics #723

@mgrabovsky

Description

@mgrabovsky

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions