JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q23199F
  • License BSD

Trie based search for autocompletes with Redis.

Package Exports

  • redis-trie

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (redis-trie) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

redis-trie

Trie based autocomplete with Redis.

Install

npm i redis-trie --save

Usage

var rtrie = new Rtrie(options)

options:

  • trieKey: {String} the key prefixes for indexes, default 'trie:index:'
  • metadataKey: {String|false} the key prefixes for metadata, default 'trie:metadata', if false, not save metadata to redis.
  • client: {Object} redis client
  • host: {String} redis host(only client not exist)
  • port: {String} redis port(only client not exist)
  • password: {String} redis password(only client not exist)
  • others option see ioredis

rtrie.add(key, value, id, priority) => {Promise}

add the key with a given value and id and priority.

  • key: {String} key for index
  • value: {Object} data you may want to store directly on the index.
  • id: {String} id for metadata
  • priority: {Number|Funcrion=>Number} the relevance of this item in comprassion of others.

rtrie.del(key, id) => {Promise}

del the key.

  • key: {String} key for index
  • id: {String} id for metadata

rtrie.search(key[, offset][, limit]) => {Promise}

search for a key.

  • key: {String} the search key
  • offset: {Number} offset, default 0
  • limit: {Number} limit, default 20

Example

'use strict';

var co = require('co');
var Rtrie = require('.');
var rtrie = new Rtrie();

var user1 = {
  _id: '55d2b3bffad4f453dbbb590b', // timestamp: 1439871935000
  username: 'user1',
  avatar: 'avatar1'
};

var user2 = {
  _id: '55d2b3fb7b61adf480a08192', // timestamp: 1439871995000
  username: 'user2',
  avatar: 'avatar2'
};

var dateFromObjectId = function (objectId) {
  return new Date(parseInt(objectId.substring(0, 8), 16) * 1000).getTime();
};

co(function* () {
  var res;
  yield rtrie.add(user1.username, user1, user1._id, dateFromObjectId(user1._id));
  res = yield rtrie.search('user');
  console.log(res);
  // [ { _id: '55d2b3bffad4f453dbbb590b',
  //     username: 'user1',
  //     avatar: 'avatar1' } ]
  res = yield rtrie.search('user1');
  console.log(res);
  // [ { _id: '55d2b3bffad4f453dbbb590b',
  //     username: 'user1',
  //     avatar: 'avatar1' } ]
  res = yield rtrie.search('user2');
  console.log(res);
  // []

  rtrie.add(user2.username, user2, user2._id, dateFromObjectId(user2._id));
  res = yield rtrie.search('user');
  console.log(res);
  // [ { _id: '55d2b3fb7b61adf480a08192',
  //     username: 'user2',
  //     avatar: 'avatar2' },
  //   { _id: '55d2b3bffad4f453dbbb590b',
  //     username: 'user1',
  //     avatar: 'avatar1' } ]
  res = yield rtrie.search('user1');
  console.log(res);
  // [ { _id: '55d2b3bffad4f453dbbb590b',
  //     username: 'user1',
  //     avatar: 'avatar1' } ]
  res = yield rtrie.search('user2');
  console.log(res);
  // [ { _id: '55d2b3fb7b61adf480a08192',
  //     username: 'user2',
  //     avatar: 'avatar2' } ]

  yield rtrie.del(user1.username, user1._id);

  res = yield rtrie.search('user');
  console.log(res);
  // [ { _id: '55d2b3fb7b61adf480a08192',
  //     username: 'user2',
  //     avatar: 'avatar2' } ]
  res = yield rtrie.search('user1');
  console.log(res);
  // []
  res = yield rtrie.search('user2');
  console.log(res);
  // [ { _id: '55d2b3fb7b61adf480a08192',
  //     username: 'user2',
  //     avatar: 'avatar2' } ]
});

or

'use strict';

var co = require('co');
var Rtrie = require('.');
var rtrie = new Rtrie();

var user = {
  _id: '55d2b3bffad4f453dbbb590b',
  username: 'user',
  avatar: 'avatar'
};

var user1 = {
  _id: '55d2b3fb7b61adf480a08192',
  username: 'user1',
  avatar: 'avatar1'
};

var user11 = {
  _id: '55d2b3fb7b61adf480a08193',
  username: 'user11',
  avatar: 'avatar11'
};

var priority = function (key, value, id, part) {
  return 100 - ( key.length - part.length );
};

co(function* () {
  var res;
  yield rtrie.add(user.username, user, user._id, priority);
  yield rtrie.add(user1.username, user1, user1._id, priority);
  yield rtrie.add(user11.username, user11, user11._id, priority);
  res = yield rtrie.search('user');
  console.log(res);
  // [ { _id: '55d2b3bffad4f453dbbb590b',
  //     username: 'user',
  //     avatar: 'avatar' },
  //   { _id: '55d2b3fb7b61adf480a08192',
  //     username: 'user1',
  //     avatar: 'avatar1' },
  //   { _id: '55d2b3fb7b61adf480a08193',
  //     username: 'user11',
  //     avatar: 'avatar11' } ]
});

when metadataKey is false:

'use strict';

var co = require('co');
var Rtrie = require('.');
var rtrie = new Rtrie({
  metadataKey: false
});

var user = {
  _id: '55d2b3bffad4f453dbbb590b',
  username: 'user',
  avatar: 'avatar'
};

var user1 = {
  _id: '55d2b3fb7b61adf480a08192',
  username: 'user1',
  avatar: 'avatar1'
};

var user11 = {
  _id: '55d2b3fb7b61adf480a08193',
  username: 'user11',
  avatar: 'avatar11'
};

var priority = function (key, value, id, part) {
  return 100 - ( key.length - part.length );
};

co(function* () {
  var res;
  yield rtrie.add(user.username, null, user._id, priority);
  yield rtrie.add(user1.username, null, user1._id, priority);
  yield rtrie.add(user11.username, null, user11._id, priority);
  res = yield rtrie.search('user');
  console.log(res);
  // [ '55d2b3bffad4f453dbbb590b',
  //   '55d2b3fb7b61adf480a08192',
  //   '55d2b3fb7b61adf480a08193' ]
});

Test

npm test