mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-11-04 01:46:28 +00:00 
			
		
		
		
	Implement the experimental drop search after and nb search per core
This commit is contained in:
		@@ -265,6 +265,8 @@ struct Infos {
 | 
				
			|||||||
    experimental_contains_filter: bool,
 | 
					    experimental_contains_filter: bool,
 | 
				
			||||||
    experimental_enable_metrics: bool,
 | 
					    experimental_enable_metrics: bool,
 | 
				
			||||||
    experimental_search_queue_size: usize,
 | 
					    experimental_search_queue_size: usize,
 | 
				
			||||||
 | 
					    experimental_drop_search_after: usize,
 | 
				
			||||||
 | 
					    experimental_nb_searches_per_core: usize,
 | 
				
			||||||
    experimental_logs_mode: LogMode,
 | 
					    experimental_logs_mode: LogMode,
 | 
				
			||||||
    experimental_replication_parameters: bool,
 | 
					    experimental_replication_parameters: bool,
 | 
				
			||||||
    experimental_enable_logs_route: bool,
 | 
					    experimental_enable_logs_route: bool,
 | 
				
			||||||
@@ -308,6 +310,8 @@ impl From<Opt> for Infos {
 | 
				
			|||||||
            experimental_contains_filter,
 | 
					            experimental_contains_filter,
 | 
				
			||||||
            experimental_enable_metrics,
 | 
					            experimental_enable_metrics,
 | 
				
			||||||
            experimental_search_queue_size,
 | 
					            experimental_search_queue_size,
 | 
				
			||||||
 | 
					            experimental_drop_search_after,
 | 
				
			||||||
 | 
					            experimental_nb_searches_per_core,
 | 
				
			||||||
            experimental_logs_mode,
 | 
					            experimental_logs_mode,
 | 
				
			||||||
            experimental_replication_parameters,
 | 
					            experimental_replication_parameters,
 | 
				
			||||||
            experimental_enable_logs_route,
 | 
					            experimental_enable_logs_route,
 | 
				
			||||||
@@ -359,6 +363,8 @@ impl From<Opt> for Infos {
 | 
				
			|||||||
            experimental_contains_filter,
 | 
					            experimental_contains_filter,
 | 
				
			||||||
            experimental_enable_metrics,
 | 
					            experimental_enable_metrics,
 | 
				
			||||||
            experimental_search_queue_size,
 | 
					            experimental_search_queue_size,
 | 
				
			||||||
 | 
					            experimental_drop_search_after: experimental_drop_search_after.into(),
 | 
				
			||||||
 | 
					            experimental_nb_searches_per_core: experimental_nb_searches_per_core.into(),
 | 
				
			||||||
            experimental_logs_mode,
 | 
					            experimental_logs_mode,
 | 
				
			||||||
            experimental_replication_parameters,
 | 
					            experimental_replication_parameters,
 | 
				
			||||||
            experimental_enable_logs_route,
 | 
					            experimental_enable_logs_route,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ use std::path::PathBuf;
 | 
				
			|||||||
use std::str::FromStr;
 | 
					use std::str::FromStr;
 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
use std::thread::available_parallelism;
 | 
					use std::thread::available_parallelism;
 | 
				
			||||||
 | 
					use std::time::Duration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use actix_web::http::KeepAlive;
 | 
					use actix_web::http::KeepAlive;
 | 
				
			||||||
use actix_web::web::Data;
 | 
					use actix_web::web::Data;
 | 
				
			||||||
@@ -153,8 +154,14 @@ async fn run_http(
 | 
				
			|||||||
    let auth_controller = Data::from(auth_controller);
 | 
					    let auth_controller = Data::from(auth_controller);
 | 
				
			||||||
    let search_queue = SearchQueue::new(
 | 
					    let search_queue = SearchQueue::new(
 | 
				
			||||||
        opt.experimental_search_queue_size,
 | 
					        opt.experimental_search_queue_size,
 | 
				
			||||||
        available_parallelism().unwrap_or(NonZeroUsize::new(2).unwrap()),
 | 
					        available_parallelism()
 | 
				
			||||||
    );
 | 
					            .unwrap_or(NonZeroUsize::new(2).unwrap())
 | 
				
			||||||
 | 
					            .checked_mul(opt.experimental_nb_searches_per_core)
 | 
				
			||||||
 | 
					            .unwrap_or(NonZeroUsize::MAX),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    .with_time_to_abort(Duration::from_secs(
 | 
				
			||||||
 | 
					        usize::from(opt.experimental_drop_search_after) as u64
 | 
				
			||||||
 | 
					    ));
 | 
				
			||||||
    let search_queue = Data::new(search_queue);
 | 
					    let search_queue = Data::new(search_queue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let http_server = HttpServer::new(move || {
 | 
					    let http_server = HttpServer::new(move || {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ use std::env::VarError;
 | 
				
			|||||||
use std::ffi::OsStr;
 | 
					use std::ffi::OsStr;
 | 
				
			||||||
use std::fmt::Display;
 | 
					use std::fmt::Display;
 | 
				
			||||||
use std::io::{BufReader, Read};
 | 
					use std::io::{BufReader, Read};
 | 
				
			||||||
use std::num::ParseIntError;
 | 
					use std::num::{NonZeroUsize, ParseIntError};
 | 
				
			||||||
use std::ops::Deref;
 | 
					use std::ops::Deref;
 | 
				
			||||||
use std::path::PathBuf;
 | 
					use std::path::PathBuf;
 | 
				
			||||||
use std::str::FromStr;
 | 
					use std::str::FromStr;
 | 
				
			||||||
@@ -55,6 +55,8 @@ const MEILI_EXPERIMENTAL_ENABLE_LOGS_ROUTE: &str = "MEILI_EXPERIMENTAL_ENABLE_LO
 | 
				
			|||||||
const MEILI_EXPERIMENTAL_CONTAINS_FILTER: &str = "MEILI_EXPERIMENTAL_CONTAINS_FILTER";
 | 
					const MEILI_EXPERIMENTAL_CONTAINS_FILTER: &str = "MEILI_EXPERIMENTAL_CONTAINS_FILTER";
 | 
				
			||||||
const MEILI_EXPERIMENTAL_ENABLE_METRICS: &str = "MEILI_EXPERIMENTAL_ENABLE_METRICS";
 | 
					const MEILI_EXPERIMENTAL_ENABLE_METRICS: &str = "MEILI_EXPERIMENTAL_ENABLE_METRICS";
 | 
				
			||||||
const MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE: &str = "MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE";
 | 
					const MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE: &str = "MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE";
 | 
				
			||||||
 | 
					const MEILI_EXPERIMENTAL_DROP_SEARCH_AFTER: &str = "MEILI_EXPERIMENTAL_DROP_SEARCH_AFTER";
 | 
				
			||||||
 | 
					const MEILI_EXPERIMENTAL_NB_SEARCHES_PER_CORE: &str = "MEILI_EXPERIMENTAL_NB_SEARCHES_PER_CORE";
 | 
				
			||||||
const MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE: &str =
 | 
					const MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE: &str =
 | 
				
			||||||
    "MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE";
 | 
					    "MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE";
 | 
				
			||||||
const MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKS: &str =
 | 
					const MEILI_EXPERIMENTAL_MAX_NUMBER_OF_BATCHED_TASKS: &str =
 | 
				
			||||||
@@ -361,6 +363,22 @@ pub struct Opt {
 | 
				
			|||||||
    #[serde(default = "default_experimental_search_queue_size")]
 | 
					    #[serde(default = "default_experimental_search_queue_size")]
 | 
				
			||||||
    pub experimental_search_queue_size: usize,
 | 
					    pub experimental_search_queue_size: usize,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Experimental drop search after. For more information, see: <https://github.com/orgs/meilisearch/discussions/783>
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// Lets you customize after how much seconds should Meilisearch consider a search as irrelevant and drop it.
 | 
				
			||||||
 | 
					    /// The default value is 60.
 | 
				
			||||||
 | 
					    #[clap(long, env = MEILI_EXPERIMENTAL_DROP_SEARCH_AFTER, default_value_t = default_drop_search_after())]
 | 
				
			||||||
 | 
					    #[serde(default = "default_drop_search_after")]
 | 
				
			||||||
 | 
					    pub experimental_drop_search_after: NonZeroUsize,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Experimental number of searches per core. For more information, see: <https://github.com/orgs/meilisearch/discussions/784>
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// Lets you customize after how many search requests can run on each cores.
 | 
				
			||||||
 | 
					    /// The default value is 4.
 | 
				
			||||||
 | 
					    #[clap(long, env = MEILI_EXPERIMENTAL_NB_SEARCHES_PER_CORE, default_value_t = default_nb_searches_per_core())]
 | 
				
			||||||
 | 
					    #[serde(default = "default_drop_search_after")]
 | 
				
			||||||
 | 
					    pub experimental_nb_searches_per_core: NonZeroUsize,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Experimental logs mode feature. For more information, see: <https://github.com/orgs/meilisearch/discussions/723>
 | 
					    /// Experimental logs mode feature. For more information, see: <https://github.com/orgs/meilisearch/discussions/723>
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// Change the mode of the logs on the console.
 | 
					    /// Change the mode of the logs on the console.
 | 
				
			||||||
@@ -492,6 +510,8 @@ impl Opt {
 | 
				
			|||||||
            experimental_contains_filter,
 | 
					            experimental_contains_filter,
 | 
				
			||||||
            experimental_enable_metrics,
 | 
					            experimental_enable_metrics,
 | 
				
			||||||
            experimental_search_queue_size,
 | 
					            experimental_search_queue_size,
 | 
				
			||||||
 | 
					            experimental_drop_search_after,
 | 
				
			||||||
 | 
					            experimental_nb_searches_per_core,
 | 
				
			||||||
            experimental_logs_mode,
 | 
					            experimental_logs_mode,
 | 
				
			||||||
            experimental_enable_logs_route,
 | 
					            experimental_enable_logs_route,
 | 
				
			||||||
            experimental_replication_parameters,
 | 
					            experimental_replication_parameters,
 | 
				
			||||||
@@ -559,6 +579,14 @@ impl Opt {
 | 
				
			|||||||
            MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE,
 | 
					            MEILI_EXPERIMENTAL_SEARCH_QUEUE_SIZE,
 | 
				
			||||||
            experimental_search_queue_size.to_string(),
 | 
					            experimental_search_queue_size.to_string(),
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					        export_to_env_if_not_present(
 | 
				
			||||||
 | 
					            MEILI_EXPERIMENTAL_DROP_SEARCH_AFTER,
 | 
				
			||||||
 | 
					            experimental_drop_search_after.to_string(),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        export_to_env_if_not_present(
 | 
				
			||||||
 | 
					            MEILI_EXPERIMENTAL_NB_SEARCHES_PER_CORE,
 | 
				
			||||||
 | 
					            experimental_nb_searches_per_core.to_string(),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        export_to_env_if_not_present(
 | 
					        export_to_env_if_not_present(
 | 
				
			||||||
            MEILI_EXPERIMENTAL_LOGS_MODE,
 | 
					            MEILI_EXPERIMENTAL_LOGS_MODE,
 | 
				
			||||||
            experimental_logs_mode.to_string(),
 | 
					            experimental_logs_mode.to_string(),
 | 
				
			||||||
@@ -894,6 +922,14 @@ fn default_experimental_search_queue_size() -> usize {
 | 
				
			|||||||
    1000
 | 
					    1000
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn default_drop_search_after() -> NonZeroUsize {
 | 
				
			||||||
 | 
					    NonZeroUsize::new(60).unwrap()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn default_nb_searches_per_core() -> NonZeroUsize {
 | 
				
			||||||
 | 
					    NonZeroUsize::new(4).unwrap()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Indicates if a snapshot was scheduled, and if yes with which interval.
 | 
					/// Indicates if a snapshot was scheduled, and if yes with which interval.
 | 
				
			||||||
#[derive(Debug, Default, Copy, Clone, Deserialize, Serialize)]
 | 
					#[derive(Debug, Default, Copy, Clone, Deserialize, Serialize)]
 | 
				
			||||||
pub enum ScheduleSnapshot {
 | 
					pub enum ScheduleSnapshot {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user