flo

Redis powered node.js autocompleter inspired by soulmate

npm install flo
4 downloads in the last week
11 downloads in the last month

flo

flo is a redis powered node.js autocompleter inspired by soulmate. You can use this anywhere you want since this is just a module. If you look into the examples folder, I have provided an example on how to get it work with express.

If you want see a real world example of this, you should try out the search box at SeatGeek or Quora.

Documentations

First, connect to the redis instance:

Sets up a new Redis Connection.

var flo = require('flo').connect();

options - Optional Hash of options.

  • redis - An existing redis connection to use.
  • host - String Redis host. (Default: Redis' default)
  • port - Integer Redis port. (Default: Redis' default)
  • password - String Redis password.
  • namespace - String namespace prefix for Redis keys. (Default: flo).
  • mincomplete - Minimum completion of keys required for auto completion. (Default: 1)
  • database - Integer of the Redis database to select.

Returns a Connection instance.

These are the public functions:

Add a new term

add_term(type, id, term, score, data, callback):

  • type - the type of data of this term (String)
  • id - unique identifier(within the specific type)
  • term - the phrase you wish to provide completions for
  • score - user specified ranking metric (redis will order things lexicographically for items with the same score)
  • data - container for metadata that you would like to return when this item is matched (optional)
  • callback - callback to be run (optional)

Returns nothing.

Search for a term

search_term(types, phrase, limit, callback):

  • types - types of term that you are looking for (Array of String)
  • phrase - the phrase or phrases you want to be autocompleted
  • limit - the count of the number you want to return (optional, default: 5)
  • callback(err, result) - err is the error and results is the results

This call:

search_term(["chinese", "indian"], "rice", 1, cb);

will return a result in json format like:

{
  term: "rice"
  chinese: [
      {
        id: 3,
        term: "mongolian fried rice",
        score: 10,
        data: {
          name: "Gonghu Chinese Restaurant",
          address: "304, University Avenue, Palo Alto"
        }
      }
    ],
   indian: [
      {
        id: 1,
        term: "Briyani Chicken Rice",
        score: 5,
        data: {
          name: "Bombay Grill",
          address: "100 Green St, Urbana"
        }
      }
    ]
}

Remove a term

remove_term(type, id, callback):

  • type - the type of data of this term (String)
  • id - unique identifier(within the specific type)
  • callback - callback to be run (optional)

Returns nothing.

Get the IDs for a term

get_ids (type, term, callback):

  • type - the type of data for this term
  • term - the term to find the unique identifiers for
  • callback(err, result) - result is an array of IDs for the term. Empty array if none were found

Get the data for an ID

get_data(type, id, callback):

  • type - the type of data for this term
  • id - unique identifier (within the specific type)
  • callback(err, result) - result is the data

For more information, you can read it here.

Tests

To run tests, first make sure your local redis is running, then:

./node_modules/expresso/bin/expresso test/*.test.js

License

MIT License


Author

Teng Siong Ong

Company

FLOChip

npm loves you