Merge branch 'issue943' of https://github.com/gorogoroumaru/MeiliSearch into issue943

This commit is contained in:
gorogoroumaru 2020-10-02 20:01:13 +09:00
commit 5ef3a01b6c
2 changed files with 46 additions and 13 deletions

View File

@ -100,6 +100,12 @@ where
debug!("found {} documents", docids.len()); debug!("found {} documents", docids.len());
debug!("number of postings {:?}", queries.len()); debug!("number of postings {:?}", queries.len());
if let Some(f) = facet_count_docids {
// hardcoded value, until approximation optimization
result.exhaustive_facets_count = Some(true);
result.facets = Some(facet_count(f, &docids));
}
if let Some(facets_docids) = facets_docids { if let Some(facets_docids) = facets_docids {
let intersection = sdset::duo::OpBuilder::new(docids.as_ref(), facets_docids.as_set()) let intersection = sdset::duo::OpBuilder::new(docids.as_ref(), facets_docids.as_set())
.intersection() .intersection()
@ -107,12 +113,6 @@ where
docids = Cow::Owned(intersection); docids = Cow::Owned(intersection);
} }
if let Some(f) = facet_count_docids {
// hardcoded value, until approximation optimization
result.exhaustive_facets_count = Some(true);
result.facets = Some(facet_count(f, &docids));
}
let before = Instant::now(); let before = Instant::now();
mk_arena!(arena); mk_arena!(arena);
let mut bare_matches = cleanup_bare_matches(&mut arena, &docids, queries); let mut bare_matches = cleanup_bare_matches(&mut arena, &docids, queries);
@ -243,6 +243,12 @@ where
debug!("found {} documents", docids.len()); debug!("found {} documents", docids.len());
debug!("number of postings {:?}", queries.len()); debug!("number of postings {:?}", queries.len());
if let Some(f) = facet_count_docids {
// hardcoded value, until approximation optimization
result.exhaustive_facets_count = Some(true);
result.facets = Some(facet_count(f, &docids));
}
if let Some(facets_docids) = facets_docids { if let Some(facets_docids) = facets_docids {
let intersection = OpBuilder::new(docids.as_ref(), facets_docids.as_set()) let intersection = OpBuilder::new(docids.as_ref(), facets_docids.as_set())
.intersection() .intersection()
@ -250,12 +256,6 @@ where
docids = Cow::Owned(intersection); docids = Cow::Owned(intersection);
} }
if let Some(f) = facet_count_docids {
// hardcoded value, until approximation optimization
result.exhaustive_facets_count = Some(true);
result.facets = Some(facet_count(f, &docids));
}
let before = Instant::now(); let before = Instant::now();
mk_arena!(arena); mk_arena!(arena);
let mut bare_matches = cleanup_bare_matches(&mut arena, &docids, queries); let mut bare_matches = cleanup_bare_matches(&mut arena, &docids, queries);

View File

@ -1466,7 +1466,6 @@ async fn test_facet_count() {
server.update_all_settings(body).await; server.update_all_settings(body).await;
// same as before, but now facets are set: // same as before, but now facets are set:
test_post_get_search!(server, query, |response, _status_code|{ test_post_get_search!(server, query, |response, _status_code|{
println!("{}", response);
assert!(response.get("exhaustiveFacetsCount").is_some()); assert!(response.get("exhaustiveFacetsCount").is_some());
assert_eq!(response.get("facetsDistribution").unwrap().as_object().unwrap().values().count(), 1); assert_eq!(response.get("facetsDistribution").unwrap().as_object().unwrap().values().count(), 1);
// assert that case is preserved // assert that case is preserved
@ -1696,3 +1695,37 @@ async fn update_documents_with_facet_distribution() {
let (response2, _) = server.search_post(search).await; let (response2, _) = server.search_post(search).await;
assert_json_eq!(expected_facet_distribution, response2["facetsDistribution"].clone()); assert_json_eq!(expected_facet_distribution, response2["facetsDistribution"].clone());
} }
#[actix_rt::test]
async fn test_facet_count_with_facet_filter() {
let mut server = common::Server::test_server().await;
let body = json!({
"attributesForFaceting": ["gender"]
});
server.update_all_settings(body).await;
let query = json!({
"q": "a",
"facetsDistribution": ["gender"],
"facetFilters": ["gender:male"],
});
test_post_get_search!(server, query, |response, _status_code|{
assert!(response.get("exhaustiveFacetsCount").is_some());
let facets_distribution = response.get("facetsDistribution").unwrap().as_object();
assert_eq!(facets_distribution.unwrap()["gender"]["male"], 37);
assert_eq!(facets_distribution.unwrap()["gender"]["female"], 39);
});
// facet distribution should remain the same when facet filter changes
let query = json!({
"q": "a",
"facetsDistribution": ["gender"],
"facetFilters": [["gender:male", "gender:female"]],
});
test_post_get_search!(server, query, |response, _status_code|{
assert!(response.get("exhaustiveFacetsCount").is_some());
let facets_distribution = response.get("facetsDistribution").unwrap().as_object();
assert_eq!(facets_distribution.unwrap()["gender"]["male"], 37);
assert_eq!(facets_distribution.unwrap()["gender"]["female"], 39);
});
}