Faiss-rs
This project provides Rust bindings to Faiss, the state-of-the-art vector search and clustering library.
Installing as a dependency
Currently, this crate does not build Faiss automatically for you. The dynamic library needs to be installed manually to your system.
- Follow the instructions here to build Faiss using CMake, enabling the variables
FAISS_ENABLE_C_API
andBUILD_SHARED_LIBS
. The crate is currently only compatible with version v1.7.1. Consider building Faiss from this fork,c_api_head
branch, which will contain the latest bindings to the C interface. For example:cmake -B . -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
faiss_c
("c_api/libfaiss_c.so" on Linux), which needs to be installed in a place where your system will pick up (in Linux, try somewhere in theLD_LIBRARY_PATH
environment variable, such as "/usr/lib", or try adding a new path to this variable). For GPU support, don't forget to enable the optionFAISS_ENABLE_GPU
. Note:faiss_c
might link dynamically to the nativefaiss
library, which in that case you will need to install the main shared object (faiss/libfaiss.so) as well. - You are now ready to include this crate as a dependency:
[dependencies]
"faiss" = "0.10.0"
If you have built Faiss with GPU support, you can include the "gpu" feature in the bindings:
[dependencies]
"faiss" = {version = "0.10.0", features = ["gpu"]}
Using
A basic example is seen below. Please check out the documentation for more.
use faiss::{Index, index_factory, MetricType};
let mut index = index_factory(64, "Flat", MetricType::L2)?;
index.add(&my_data)?;
let result = index.search(&my_query, 5)?;
for (i, (l, d)) in result.labels.iter()
.zip(result.distances.iter())
.enumerate()
{
println!("#{}: {} (D={})", i + 1, *l, *d);
}
License and attribution notice
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
This work is not affiliated with Facebook AI Research or the main Faiss software.