Add is_finite_pagination method to SearchQuery

This commit is contained in:
ManyTheFish 2022-10-26 18:08:29 +02:00
parent 68c9751d49
commit f4021273b8
2 changed files with 8 additions and 3 deletions

View File

@ -428,7 +428,7 @@ impl SearchAggregator {
ret.max_terms_number = q.split_whitespace().count(); ret.max_terms_number = q.split_whitespace().count();
} }
if query.hits_per_page.or(query.page).is_some() { if query.is_finite_pagination() {
let limit = query.hits_per_page.unwrap_or_else(DEFAULT_SEARCH_LIMIT); let limit = query.hits_per_page.unwrap_or_else(DEFAULT_SEARCH_LIMIT);
ret.max_limit = limit; ret.max_limit = limit;
ret.max_offset = query.page.unwrap_or(1).saturating_sub(1) * limit; ret.max_offset = query.page.unwrap_or(1).saturating_sub(1) * limit;

View File

@ -63,6 +63,12 @@ pub struct SearchQuery {
pub matching_strategy: MatchingStrategy, pub matching_strategy: MatchingStrategy,
} }
impl SearchQuery {
pub fn is_finite_pagination(&self) -> bool {
self.page.or(self.hits_per_page).is_some()
}
}
#[derive(Deserialize, Debug, Clone, PartialEq, Eq)] #[derive(Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub enum MatchingStrategy { pub enum MatchingStrategy {
@ -138,14 +144,13 @@ impl Index {
search.query(query); search.query(query);
} }
let is_finite_pagination = query.is_finite_pagination();
search.terms_matching_strategy(query.matching_strategy.into()); search.terms_matching_strategy(query.matching_strategy.into());
let max_total_hits = self let max_total_hits = self
.pagination_max_total_hits(&rtxn)? .pagination_max_total_hits(&rtxn)?
.unwrap_or(DEFAULT_PAGINATION_MAX_TOTAL_HITS); .unwrap_or(DEFAULT_PAGINATION_MAX_TOTAL_HITS);
let is_finite_pagination = query.page.or(query.hits_per_page).is_some();
search.exhaustive_number_hits(is_finite_pagination); search.exhaustive_number_hits(is_finite_pagination);
// compute the offset on the limit depending on the pagination mode. // compute the offset on the limit depending on the pagination mode.