struct destructuring for MultiSearchAggregator

This commit is contained in:
Vivek Kumar 2023-09-11 23:04:33 +05:30
parent 4c641b79a2
commit 07d36180ad
No known key found for this signature in database
GPG Key ID: 5F915FFA1FD3B841

View File

@ -878,7 +878,7 @@ impl SearchAggregator {
show_ranking_score_details, show_ranking_score_details,
} = self; } = self;
if self.total_received == 0 { if total_received == 0 {
None None
} else { } else {
// we get all the values in a sorted manner // we get all the values in a sorted manner
@ -983,8 +983,38 @@ impl MultiSearchAggregator {
let user_agents = extract_user_agents(request).into_iter().collect(); let user_agents = extract_user_agents(request).into_iter().collect();
let distinct_indexes: HashSet<_> = let distinct_indexes: HashSet<_> = query
query.iter().map(|query| query.index_uid.as_str()).collect(); .iter()
.map(|query| {
// make sure we get a compilation error if a field gets added to / removed from SearchQueryWithIndex
let SearchQueryWithIndex {
index_uid,
q: _,
vector: _,
offset: _,
limit: _,
page: _,
hits_per_page: _,
attributes_to_retrieve: _,
attributes_to_crop: _,
crop_length: _,
attributes_to_highlight: _,
show_ranking_score: _,
show_ranking_score_details: _,
show_matches_position: _,
filter: _,
sort: _,
facets: _,
highlight_pre_tag: _,
highlight_post_tag: _,
crop_marker: _,
matching_strategy: _,
attributes_to_search_on: _,
} = query;
index_uid.as_str()
})
.collect();
let show_ranking_score = query.iter().any(|query| query.show_ranking_score); let show_ranking_score = query.iter().any(|query| query.show_ranking_score);
let show_ranking_score_details = query.iter().any(|query| query.show_ranking_score_details); let show_ranking_score_details = query.iter().any(|query| query.show_ranking_score_details);
@ -1006,6 +1036,7 @@ impl MultiSearchAggregator {
self.total_succeeded = self.total_succeeded.saturating_add(1); self.total_succeeded = self.total_succeeded.saturating_add(1);
} }
/// Aggregate one [MultiSearchAggregator] into another.
pub fn aggregate(&mut self, other: Self) { pub fn aggregate(&mut self, other: Self) {
// write the aggregate in a way that will cause a compilation error if a field is added. // write the aggregate in a way that will cause a compilation error if a field is added.
@ -1047,33 +1078,45 @@ impl MultiSearchAggregator {
} }
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,
total_received,
total_succeeded,
total_distinct_index_count,
total_single_index,
total_search_count,
user_agents,
show_ranking_score,
show_ranking_score_details,
} = self;
if total_received == 0 {
None None
} else { } else {
let properties = json!({ let properties = json!({
"user-agent": self.user_agents, "user-agent": user_agents,
"requests": { "requests": {
"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,
}, },
"indexes": { "indexes": {
"total_single_index": self.total_single_index, "total_single_index": total_single_index,
"total_distinct_index_count": self.total_distinct_index_count, "total_distinct_index_count": total_distinct_index_count,
"avg_distinct_index_count": (self.total_distinct_index_count as f64) / (self.total_received as f64), // not 0 else returned early "avg_distinct_index_count": (total_distinct_index_count as f64) / (total_received as f64), // not 0 else returned early
}, },
"searches": { "searches": {
"total_search_count": self.total_search_count, "total_search_count": total_search_count,
"avg_search_count": (self.total_search_count as f64) / (self.total_received as f64), "avg_search_count": (total_search_count as f64) / (total_received as f64),
}, },
"scoring": { "scoring": {
"show_ranking_score": self.show_ranking_score, "show_ranking_score": show_ranking_score,
"show_ranking_score_details": self.show_ranking_score_details, "show_ranking_score_details": show_ranking_score_details,
} }
}); });
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,