summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2016-02-27 11:07:26 -0500
committerAndrew Gallant <jamslam@gmail.com>2016-02-27 11:07:26 -0500
commit9d1e619ff359b6e609b02f01e36952e603104bc6 (patch)
treea97a9dd0cbbd0978e92971805431ea4f5c018808 /README.md
initial commit
Diffstat (limited to 'README.md')
-rw-r--r--README.md63
1 files changed, 63 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..be907687
--- /dev/null
+++ b/README.md
@@ -0,0 +1,63 @@
+fst
+===
+This crate provides a fast implementation of ordered sets and maps using finite
+state machines. In particular, it makes use of finite state transducers to map
+keys to values as the machine is executed. Using finite state machines as data
+structures enables us to store keys in a compact format that is also easily
+searchable. For example, this crate levages memory maps to make range queries,
+regular expression queries and Levenshtein (edit) distance queries very fast.
+
+Check out my blog post
+[Index 1,600,000,000 Keys with Automata and
+Rust](http://blog.burntsushi.net/transducers/)
+for extensive background, examples and experiments.
+
+[![Linux build status](https://api.travis-ci.org/BurntSushi/fst.png)](https://travis-ci.org/BurntSushi/fst)
+[![Windows build status](https://ci.appveyor.com/api/projects/status/github/BurntSushi/fst?svg=true)](https://ci.appveyor.com/project/BurntSushi/fst)
+[![](http://meritbadge.herokuapp.com/fst)](https://crates.io/crates/fst)
+
+Dual-licensed under MIT or the [UNLICENSE](http://unlicense.org).
+
+
+### Documentation
+
+[Full API documentation and examples.](http://burntsushi.net/rustdoc/fst/)
+
+
+### Installation
+
+Simply add a corresponding entry to your `Cargo.toml` dependency list:
+
+```ignore
+[dependencies]
+fst = "0.1"
+```
+
+And add this to your crate root:
+
+```ignore
+extern crate fst;
+```
+
+
+### Example
+
+This example demonstrates building a set in memory and executing a fuzzy query
+against it. Check out the documentation for a lot more examples!
+
+```rust
+use fst::{IntoStreamer, Streamer, Levenshtein, Set};
+
+// A convenient way to create sets in memory.
+let keys = vec!["fa", "fo", "fob", "focus", "foo", "food", "foul"];
+let set = try!(Set::from_iter(keys));
+
+// Build our fuzzy query.
+let lev = try!(Levenshtein::new("foo", 1));
+
+// Apply our fuzzy query to the set we built.
+let mut stream = set.search(lev).into_stream();
+
+let keys = try!(stream.into_strs());
+assert_eq!(keys, vec!["fo", "fob", "foo", "food"]);
+```