mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 12:05:05 +08:00
struct destructuring for FacetSearchAggregator
This commit is contained in:
parent
07d36180ad
commit
26f34ec7a2
@ -1174,63 +1174,84 @@ impl FacetSearchAggregator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn succeed(&mut self, result: &FacetSearchResult) {
|
pub fn succeed(&mut self, result: &FacetSearchResult) {
|
||||||
|
let FacetSearchResult { facet_hits: _, facet_query: _, processing_time_ms } = result;
|
||||||
self.total_succeeded = self.total_succeeded.saturating_add(1);
|
self.total_succeeded = self.total_succeeded.saturating_add(1);
|
||||||
self.time_spent.push(result.processing_time_ms as usize);
|
self.time_spent.push(*processing_time_ms as usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Aggregate one [SearchAggregator] into another.
|
/// Aggregate one [FacetSearchAggregator] into another.
|
||||||
pub fn aggregate(&mut self, mut other: Self) {
|
pub fn aggregate(&mut self, mut other: Self) {
|
||||||
|
let Self {
|
||||||
|
timestamp,
|
||||||
|
user_agents,
|
||||||
|
total_received,
|
||||||
|
total_succeeded,
|
||||||
|
ref mut time_spent,
|
||||||
|
facet_names,
|
||||||
|
additional_search_parameters_provided,
|
||||||
|
} = other;
|
||||||
|
|
||||||
if self.timestamp.is_none() {
|
if self.timestamp.is_none() {
|
||||||
self.timestamp = other.timestamp;
|
self.timestamp = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// context
|
// context
|
||||||
for user_agent in other.user_agents.into_iter() {
|
for user_agent in user_agents.into_iter() {
|
||||||
self.user_agents.insert(user_agent);
|
self.user_agents.insert(user_agent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// request
|
// request
|
||||||
self.total_received = self.total_received.saturating_add(other.total_received);
|
self.total_received = self.total_received.saturating_add(total_received);
|
||||||
self.total_succeeded = self.total_succeeded.saturating_add(other.total_succeeded);
|
self.total_succeeded = self.total_succeeded.saturating_add(total_succeeded);
|
||||||
self.time_spent.append(&mut other.time_spent);
|
self.time_spent.append(time_spent);
|
||||||
|
|
||||||
// facet_names
|
// facet_names
|
||||||
for facet_name in other.facet_names.into_iter() {
|
for facet_name in facet_names.into_iter() {
|
||||||
self.facet_names.insert(facet_name);
|
self.facet_names.insert(facet_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// additional_search_parameters_provided
|
// additional_search_parameters_provided
|
||||||
self.additional_search_parameters_provided = self.additional_search_parameters_provided
|
self.additional_search_parameters_provided =
|
||||||
| other.additional_search_parameters_provided;
|
self.additional_search_parameters_provided | additional_search_parameters_provided;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn into_event(self, user: &User, event_name: &str) -> Option<Track> {
|
pub fn into_event(self, user: &User, event_name: &str) -> Option<Track> {
|
||||||
if self.total_received == 0 {
|
let Self {
|
||||||
|
timestamp,
|
||||||
|
user_agents,
|
||||||
|
total_received,
|
||||||
|
total_succeeded,
|
||||||
|
time_spent,
|
||||||
|
facet_names,
|
||||||
|
additional_search_parameters_provided,
|
||||||
|
} = self;
|
||||||
|
|
||||||
|
if total_received == 0 {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
// the index of the 99th percentage of value
|
// the index of the 99th percentage of value
|
||||||
let percentile_99th = 0.99 * (self.total_succeeded as f64 - 1.) + 1.;
|
let percentile_99th = 0.99 * (total_succeeded as f64 - 1.) + 1.;
|
||||||
// we get all the values in a sorted manner
|
// we get all the values in a sorted manner
|
||||||
let time_spent = self.time_spent.into_sorted_vec();
|
let time_spent = time_spent.into_sorted_vec();
|
||||||
// We are only interested by the slowest value of the 99th fastest results
|
// We are only interested by the slowest value of the 99th fastest results
|
||||||
let time_spent = time_spent.get(percentile_99th as usize);
|
let time_spent = time_spent.get(percentile_99th as usize);
|
||||||
|
|
||||||
let properties = json!({
|
let properties = json!({
|
||||||
"user-agent": self.user_agents,
|
"user-agent": user_agents,
|
||||||
"requests": {
|
"requests": {
|
||||||
"99th_response_time": time_spent.map(|t| format!("{:.2}", t)),
|
"99th_response_time": time_spent.map(|t| format!("{:.2}", t)),
|
||||||
"total_succeeded": self.total_succeeded,
|
"total_succeeded": total_succeeded,
|
||||||
"total_failed": self.total_received.saturating_sub(self.total_succeeded), // just to be sure we never panics
|
"total_failed": total_received.saturating_sub(total_succeeded), // just to be sure we never panics
|
||||||
"total_received": self.total_received,
|
"total_received": total_received,
|
||||||
},
|
},
|
||||||
"facets": {
|
"facets": {
|
||||||
"total_distinct_facet_count": self.facet_names.len(),
|
"total_distinct_facet_count": facet_names.len(),
|
||||||
"additional_search_parameters_provided": self.additional_search_parameters_provided,
|
"additional_search_parameters_provided": additional_search_parameters_provided,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Some(Track {
|
Some(Track {
|
||||||
timestamp: self.timestamp,
|
timestamp: timestamp,
|
||||||
user: user.clone(),
|
user: user.clone(),
|
||||||
event: event_name.to_string(),
|
event: event_name.to_string(),
|
||||||
properties,
|
properties,
|
||||||
|
Loading…
Reference in New Issue
Block a user