mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-03 11:57:07 +02:00
Merge #2281
2281: Hard limit the number of results returned by a search r=Kerollmops a=Kerollmops This PR fixes #2133 by hard-limiting the number of results that a search request can return at any time. I would like the guidance of `@MarinPostma` to test that, should I use a mocking test here? Or should I do anything else? I talked about touching the _nb_hits_ value with `@qdequele` and we concluded that it was not correct to do so. Could you please confirm that it is the right place to change that? Co-authored-by: Kerollmops <clement@meilisearch.com>
This commit is contained in:
commit
09a72cee03
2 changed files with 88 additions and 2 deletions
|
@ -1,3 +1,4 @@
|
|||
use std::cmp::min;
|
||||
use std::collections::{BTreeMap, BTreeSet, HashSet};
|
||||
use std::str::FromStr;
|
||||
use std::time::Instant;
|
||||
|
@ -34,6 +35,10 @@ pub const fn default_crop_length() -> usize {
|
|||
DEFAULT_CROP_LENGTH
|
||||
}
|
||||
|
||||
/// The maximimum number of results that the engine
|
||||
/// will be able to return in one search call.
|
||||
pub const HARD_RESULT_LIMIT: usize = 1000;
|
||||
|
||||
#[derive(Deserialize, Debug, Clone, PartialEq)]
|
||||
#[serde(rename_all = "camelCase", deny_unknown_fields)]
|
||||
pub struct SearchQuery {
|
||||
|
@ -97,8 +102,13 @@ impl Index {
|
|||
search.query(query);
|
||||
}
|
||||
|
||||
search.limit(query.limit);
|
||||
search.offset(query.offset.unwrap_or_default());
|
||||
// Make sure that a user can't get more documents than the hard limit,
|
||||
// we align that on the offset too.
|
||||
let offset = min(query.offset.unwrap_or(0), HARD_RESULT_LIMIT);
|
||||
let limit = min(query.limit, HARD_RESULT_LIMIT.saturating_sub(offset));
|
||||
|
||||
search.offset(offset);
|
||||
search.limit(limit);
|
||||
|
||||
if let Some(ref filter) = query.filter {
|
||||
if let Some(facets) = parse_filter(filter)? {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue