You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

q3-plugin-ngrams

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

q3-plugin-ngrams

This package brings n-gram, sometimes referred to as fuzzy searching, support to Q3's underlying mongoose instance. It requires zero project configurations other than enabling the _gram_ schema property where applicable.

4.5.18
latest
npmnpm
Version published
Weekly downloads
122
-20.26%
Maintainers
1
Weekly downloads
 
Created
Source

N-grams plugin

This package brings n-gram, sometimes referred to as fuzzy searching, support to Q3's underlying mongoose instance. It requires zero project configurations other than enabling the gram schema property where applicable.

Why not just use Regex?

In large collections, using Regex to search causes performance problems. Unless the regex uses an anchor and is case sensitive, all queries bypass indexing. To solve this, we must use Mongo's $text operator, which, unfortunately, does not provide partial matching either. We use n-grams to break searchable text into tiny parts so that we can provide regex-like functionality for cases like autocomplete and autosuggest.

Usage

This plugin automatically creates a new field in your schema. By default, it is deselected in your queries.

API

In addition to configuring middleware that updates the n-grams on text modification, this plugin ships two static methods.

NameDescriptionArgumentsResponse
getFuzzyQueryReturns a $text query when given a search termStringObject
initializeFuzzySearching (async)Creates n-grams for an existing collection as well as the text index

Example

const mongoose = require('mongoose');
const plugin = require('q3-plugin-ngrams');

const Schema = new mongoose.Schema({
  sample: {
    type: String,
    // this field is now $text searchable
    gram: true,
  },
});

// only required if you're not using q3-core-rest
Schema.plugin(plugin);

const Model = mongoose.model('test', Schema);

// this would all likely happen elsewhere
// we're simplifying for the sake of this example
(async () => {
  await mongoose.connect(process.env.CONNECTION_STRING);
  const search = Model.getFuzzyQuery('foo');
  const res = await Model.find(search).exec();
  console.log(res);
})();

FAQs

Package last updated on 01 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts