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]] [[package]]
name = "hannoy" name = "hannoy"
version = "0.7.0" 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 = [ dependencies = [
"bytemuck", "bytemuck",
"byteorder", "byteorder",
@ -3344,7 +3344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"windows-targets 0.52.6", "windows-targets 0.48.5",
] ]
[[package]] [[package]]
@ -6942,7 +6942,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [ dependencies = [
"windows-sys 0.59.0", "windows-sys 0.48.0",
] ]
[[package]] [[package]]

View File

@ -87,7 +87,7 @@ rhai = { version = "1.22.2", features = [
"no_time", "no_time",
"sync", "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" rand = "0.8.5"
tracing = "0.1.41" tracing = "0.1.41"
ureq = { version = "2.12.1", features = ["json"] } ureq = { version = "2.12.1", features = ["json"] }

View File

@ -461,13 +461,12 @@ impl HannoyWrapper {
for reader in self.readers(rtxn, db) { for reader in self.readers(rtxn, db) {
let reader = reader?; 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 let Some(filter) = filter {
if reader.item_ids().is_disjoint(filter) { if reader.item_ids().is_disjoint(filter) {
continue; continue;
} }
tracing::error!("Hannoy doesn't support filtering"); searcher.candidates(filter);
// searcher.candidates(filter);
} }
if let Some(mut ret) = searcher.by_item(rtxn, item)? { if let Some(mut ret) = searcher.by_item(rtxn, item)? {
@ -504,13 +503,12 @@ impl HannoyWrapper {
for reader in self.readers(rtxn, db) { for reader in self.readers(rtxn, db) {
let reader = reader?; 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 let Some(filter) = filter {
if reader.item_ids().is_disjoint(filter) { if reader.item_ids().is_disjoint(filter) {
continue; continue;
} }
tracing::error!("Hannoy doesn't support filtering"); searcher.candidates(filter);
// searcher.candidates(filter);
} }
results.append(&mut searcher.by_vector(rtxn, vector)?); results.append(&mut searcher.by_vector(rtxn, vector)?);