4.5.5 • Published 1 year ago

q3-plugin-ngrams v4.5.5

Weekly downloads
106
License
-
Repository
-
Last release
1 year ago

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);
})();
4.5.5

1 year ago

4.4.17

1 year ago

4.4.8

1 year ago

4.4.7

1 year ago

4.0.2

1 year ago

3.4.12

2 years ago

3.1.0

2 years ago

2.0.1

2 years ago

1.19.0

3 years ago

1.12.4

3 years ago

1.10.0

3 years ago

1.7.10

3 years ago

1.7.9

3 years ago

1.7.8

3 years ago

1.7.6

3 years ago

1.7.5

3 years ago

1.7.4

3 years ago

1.7.3

3 years ago

1.7.2

3 years ago

1.7.1

3 years ago

1.7.0

3 years ago