Socket
Socket
Sign inDemoInstall

q3-plugin-ngrams

Package Overview
Dependencies
167
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

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.


Version published
Weekly downloads
8
Maintainers
1
Created
Weekly downloads
 

Readme

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

Last updated on 09 Feb 2023

Did you know?

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc