Use a version of hannoy with basic filtering

This commit is contained in:
Kerollmops
2025-07-24 12:20:01 +02:00
parent bc1aa5af07
commit 5d22377c2f
3 changed files with 8 additions and 10 deletions

6
Cargo.lock generated
View File

@ -2581,7 +2581,7 @@ dependencies = [
[[package]]
name = "hannoy"
version = "0.7.0"
source = "git+https://github.com/kerollmops/hannoy?branch=expose-private-types#98c7adda0d96a9f98203797d24c26a4de06cab3e"
source = "git+https://github.com/kerollmops/hannoy?branch=basic-and-ugly-filtering#c8c9d8bf58642df8cf7e994d5cd8018b91c42369"
dependencies = [
"bytemuck",
"byteorder",
@ -3344,7 +3344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [
"cfg-if",
"windows-targets 0.52.6",
"windows-targets 0.48.5",
]
[[package]]
@ -6942,7 +6942,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
"windows-sys 0.59.0",
"windows-sys 0.48.0",
]
[[package]]

View File

@ -87,7 +87,7 @@ rhai = { version = "1.22.2", features = [
"no_time",
"sync",
] }
hannoy = { git = "https://github.com/kerollmops/hannoy", branch = "expose-private-types" }
hannoy = { git = "https://github.com/kerollmops/hannoy", branch = "basic-and-ugly-filtering" }
rand = "0.8.5"
tracing = "0.1.41"
ureq = { version = "2.12.1", features = ["json"] }

View File

@ -461,13 +461,12 @@ impl HannoyWrapper {
for reader in self.readers(rtxn, db) {
let reader = reader?;
let searcher = reader.nns(limit, limit * 2); // TODO find better ef
let mut searcher = reader.nns(limit, limit * 2); // TODO find better ef
if let Some(filter) = filter {
if reader.item_ids().is_disjoint(filter) {
continue;
}
tracing::error!("Hannoy doesn't support filtering");
// searcher.candidates(filter);
searcher.candidates(filter);
}
if let Some(mut ret) = searcher.by_item(rtxn, item)? {
@ -504,13 +503,12 @@ impl HannoyWrapper {
for reader in self.readers(rtxn, db) {
let reader = reader?;
let searcher = reader.nns(limit, limit * 2); // TODO find better ef
let mut searcher = reader.nns(limit, limit * 2); // TODO find better ef
if let Some(filter) = filter {
if reader.item_ids().is_disjoint(filter) {
continue;
}
tracing::error!("Hannoy doesn't support filtering");
// searcher.candidates(filter);
searcher.candidates(filter);
}
results.append(&mut searcher.by_vector(rtxn, vector)?);