mongoose-search-plugin

    0.1.2 • Public • Published

    Mongoose full-text search plugin

    Simple mongoose plugin for full text search. Uses natural stemming and distance algorythms.

    Example

      var mongoose = require('mongoose'),
        searchPlugin = require('mongoose-search-plugin');
     
      var Schema = mongoose.Schema({
        title: String,
        descirption: String,
        tags: [String]
      });
     
      Schema.plugin(searchPlugin, {
        fields: ['title', 'description', 'tags']
      });
     
      var Model = mongoose.model('MySearchModel', Schema);
      Model.search('some query', {title: 1}, {
        conditions: {title: {$exists: true}},
        sort: {title: 1},
        limit: 10
      }, function(err, data) {
        // array of finded results
        console.log(data.results);
        // count of all matching objects
        console.log(data.totalCount);
      });

    Installation

      $ npm install mongoose-search-plugin --save

    Usage

    Initialization

    plugin accepts options argument with following format:

      var options = {
        keywordsPath: '_keywords', // path for keywords, `_keywords` as default
        relevancePath: '_relevance', // path for relevance number, '_relevance' as default
        fields: [], // array of fields to use as keywords (can be String or [String] types),
        stemmer: 'PorterStemmer', // natural stemmer, PorterStemmer as default
        distance: 'JaroWinklerDistance' // distance algorythm, JaroWinklerDistance as default
      };
      Schema.plugin(searchPlugin(options));

    Search

    Model.search(query, fields, options, callback) options are optional. Method will return object of the following format:

      {
        results: [], // array of results objects
        totalCount: 0 // number of objects, that matched criteries
      }

    Options has following format:

      {
        conditions: {}, // criteria for query
        sort: {} // sorting parameters
        populate: [{path: '', fields: ''}], // array of paths to populate
        ... and other options of Model.find method
      }

    By default results sorts by relevance field, that defined in relevancePath plugin option.

    Set keywords

    If You start using plugin on existing database to initialize keywords field in object use setKeywords method.

      Model.setKeywords(function(err) {
        // ...
      });

    License: MIT

    Install

    npm i mongoose-search-plugin

    DownloadsWeekly Downloads

    12

    Version

    0.1.2

    License

    MIT

    Last publish

    Collaborators

    • freakycue