Redis powered node.js autocompleter inspired by soulmate.
CoffeeScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
examples
samples
src
test
.gitignore
Cakefile
LICENSE
README.md
index.js
package.json

README.md

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