flo
Version:
Redis powered node.js autocompleter inspired by soulmate
131 lines (94 loc) • 3.95 kB
Markdown
flo
===
**flo** is a [redis](http://redis.io) powered [node.js](http://nodejs.org) autocompleter inspired by [soulmate](https://github.com/seatgeek/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](http://expressjs.com/).
If you want see a real world example of this, you should try out the search box at [SeatGeek](http://seatgeek.com) or [Quora](http://quora.com).
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](https://github.com/siong1987/flo/tree/master/docs).
## Tests
To run tests, first make sure your local redis is running, then:
./node_modules/expresso/bin/expresso test/*.test.js
### License
[MIT License](https://github.com/siong1987/flo/blob/master/LICENSE)
---
### Author
[Teng Siong Ong](https://github.com/siong1987/)
### Company
[FLOChip](http://flochip.com)