4204: Throw error when the vector search is sent with the wrong size r=Kerollmops a=dureuill

# Pull Request

## Related issue
Fixes #4201 


Co-authored-by: Louis Dureuil <louis@meilisearch.com>
This commit is contained in:
meili-bors[bot] 2023-11-13 09:43:20 +00:00 committed by GitHub
commit ee1701157f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -434,7 +434,18 @@ pub fn execute_search(
let mut search = Search::default(); let mut search = Search::default();
let docids = match ctx.index.vector_hnsw(ctx.txn)? { let docids = match ctx.index.vector_hnsw(ctx.txn)? {
Some(hnsw) => { Some(hnsw) => {
if let Some(expected_size) = hnsw.iter().map(|(_, point)| point.len()).next() {
if vector.len() != expected_size {
return Err(UserError::InvalidVectorDimensions {
expected: expected_size,
found: vector.len(),
}
.into());
}
}
let vector = NDotProductPoint::new(vector.clone()); let vector = NDotProductPoint::new(vector.clone());
let neighbors = hnsw.search(&vector, &mut search); let neighbors = hnsw.search(&vector, &mut search);
let mut docids = Vec::new(); let mut docids = Vec::new();