Skip to content

Commit

Permalink
chore: made sure that test_hybrid uses a mocked server
Browse files Browse the repository at this point in the history
  • Loading branch information
CommanderStorm committed Jul 8, 2024
1 parent 4cf2da8 commit 980e714
Showing 1 changed file with 24 additions and 56 deletions.
80 changes: 24 additions & 56 deletions src/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1409,66 +1409,34 @@ mod tests {
Ok(())
}

#[meilisearch_test]
async fn test_hybrid(client: Client, index: Index) -> Result<(), Error> {
setup_hybrid_searching(&client, &index).await?;
setup_test_index(&client, &index).await?;

// "2nd" = "second"
// no semantic searching => no matches
let results: SearchResults<Document> = index.search().with_query("2nd").execute().await?;
assert_eq!(results.hits.len(), 0);

// an embedding should be able to detect that this is equivalent, but not the regular search
let results: SearchResults<Document> = index
.search()
.with_query("2nd")
.with_vector(&[2000.0])
.with_hybrid("default", 1.0) // entirely rely on semantic searching
.execute()
.await?;
assert_eq!(results.hits.len(), 1);
assert_eq!(
&Document {
id: 1,
value: S("dolor sit amet, consectetur adipiscing elit"),
kind: S("text"),
number: 10,
nested: Nested { child: S("second") },
_vectors: None,
},
&results.hits[0].result
);

// word that has a typo => would have been found via traditional means
// if entirely relying on semantic searching, no result is found
let results: SearchResults<Document> = index
#[tokio::test]
async fn test_hybrid() -> Result<(), Error> {
// this is mocked as I could not get the hybrid searching to work
// See https://github.com/meilisearch/meilisearch-rust/pull/554 for further context
let mut s = mockito::Server::new_async().await;
let mock_server_url = s.url();
let client = Client::new(mock_server_url, None::<String>)?;
let index = client.index("mocked_index");

let req = r#"{"q":"hello hybrid searching","hybrid":{"embedder":"default","semanticRatio":0.0},"vector":[1000.0]}"#.to_string();
let response = r#"{"hits":[],"offset":null,"limit":null,"estimatedTotalHits":null,"page":null,"hitsPerPage":null,"totalHits":null,"totalPages":null,"facetDistribution":null,"facetStats":null,"processingTimeMs":0,"query":"","indexUid":null}"#.to_string();
let mock_res = s
.mock("POST", "/indexes/mocked_index/search")
.with_status(200)
.match_body(mockito::Matcher::Exact(req))
.with_body(&response)
.expect(1)
.create_async()
.await;
let results: Result<SearchResults<Document>, Error> = index
.search()
.with_query("lohrem")
.with_hybrid("default", 1.0)
.with_vector(&[1000.0])
.execute()
.await?;
assert_eq!(results.hits.len(), 0);
let results: SearchResults<Document> = index
.search()
.with_query("lohrem")
.with_query("hello hybrid searching")
.with_hybrid("default", 0.0)
.with_vector(&[1000.0])
.execute()
.await?;
assert_eq!(results.hits.len(), 1);
assert_eq!(
&Document {
id: 0,
value: S("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."),
kind: S("text"),
number: 0,
nested: Nested { child: S("first") },
_vectors: None,
},
&results.hits[0].result
);
.await;
mock_res.assert_async().await;
results?; // purposely not done above to have better debugging output

Ok(())
}
Expand Down

0 comments on commit 980e714

Please sign in to comment.