Best fuzzy search module
Tags: webdev, tutorial, javascript, programming
Published: 2022-11-20 10:03:31

Add accessible search functionalities in front without ElasticSearch and machine learning.

**Under the Hood**
Fuzzy search is searching abstracts nearby and exact words. For example, “vin” is the searched word that will return the following terms —
- Edin
- Vim
- inside
- in-depth
- closing
- writing
- blockchain
- and many more

Fuzzy search becomes essential for your website to add powerful search capabilities beyond the human scope.

Google use machine learning, and ElasticSearch uses an indexing algorithm to add powerful search functionalities for the user.

What if you don’t want to use machine learning and paid versions of ElasticSearch and still want to add fuzzy search to your website?

**Fuse.js to the rescue**
[Fuse.js](https://fusejs.io/) is a powerful, lightweight fuzzy-search library with zero dependencies.

**Why Fuse?**
With Fuse.js, you don’t need to set up a dedicated backend to handle the search.
Simplicity and performance were the main criteria when developing this library.
Fuse can be used in the backend, like Node.js or Ruby.
2,886,201 weekly downloads on npm

**Getting started**
It’s easy to install with just one line of code.

```
yarn add fuse.js
```

**Easy to import**

```
import Fuse from 'fuse.js.'
```

**CDN import**

```
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"></script>
```

[Live Demo](https://fusejs.io/demo.html)

**APIs**
Fuse provides tonnes of methods while searching the similar and exact patterns. For example,
- **Case sensitive** — Return result matching only cases
- **Score searching** — A score of 0indicates a perfect match, while a score of 1 indicates a complete mismatch.
- **Minimum match** — Match the minimum characters.
- **Should sort** — Give the sorted result
- **Find all matches** — Give only the perfect match till the end

**Methods**
- **Search** — Search the entire collection of documents and return the list of search results
- **setCollection** — Set/replace the entire collection documents.
- **Add, Remove** — Add and remove the doc from the collection.
- **removeAt** — Remove the doc from the collection at the specified index.
- **getIndex** — Returns the generated Fuse index

**Indexing**
Pre-generate the index from the list, and pass it directly into the Fuse instance. If the list is (considerably) extensive, it speeds up instantiation.

[Gist code](https://gist.github.com/shreyvijayvargiya/588592cbe88cf1e0d8bd99e7a44896b9#file-fuse-js)


**Examples**
Once we import the fuse module, provide the collection and value as the parameter.

[Codesandbox example](https://gist.github.com/shreyvijayvargiya/588592cbe88cf1e0d8bd99e7a44896b9#file-fuse-js)

Fuse also provides a Nested search. I am using dot notation, array notion or providing a function to search in the nested array or collection.

[Read more here — Nested Search](https://fusejs.io/examples.html#nested-search)

**Conclusion**
The overall experience of adding a fuse is good. Easy to install, lightweight, can be used in the backend and easy to implement.

I have added robust search functionality on our website [**iHateReading**](https://ihatereading.in/search/react) using fuse. The experience and outcome are well expected, and I can use it directly with Node.js or backend services in future if required.

I will strongly recommend using a fuse for your next project.

That’s it for today, until next time, have a good day.

**Keep developing
Shrey
[iHateReading](ihatereading.in)**