mirror of
https://github.com/modrinth/code.git
synced 2026-07-31 13:16:38 +00:00
feat: define default search vars in env (#6902)
* feat: define default search vars in env * fix
This commit is contained in:
@@ -32,6 +32,16 @@ TYPESENSE_URL=http://localhost:8108
|
||||
TYPESENSE_API_KEY=modrinth
|
||||
TYPESENSE_INDEX_PREFIX=labrinth
|
||||
TYPESENSE_IMPORT_BATCH_SIZE=5000
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY=name,indexed_name,slug,author,indexed_author,summary
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY_WEIGHTS=[15,15,10,3,3,1]
|
||||
SEARCH_TYPESENSE_DEFAULT_PREFIX=[true,true,true,true,true,true]
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_EXACT_MATCH=true
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_NUM_MATCHING_FIELDS=false
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_TOKEN_POSITIONS=true
|
||||
SEARCH_TYPESENSE_DEFAULT_DROP_TOKENS_THRESHOLD=0
|
||||
SEARCH_TYPESENSE_DEFAULT_TEXT_MATCH_TYPE=max_weight
|
||||
SEARCH_TYPESENSE_DEFAULT_BUCKETING='{"buckets":5}'
|
||||
SEARCH_TYPESENSE_DEFAULT_MAX_CANDIDATES=24
|
||||
|
||||
REDIS_MODE=standalone
|
||||
REDIS_CONNECTION_TYPE=pooled
|
||||
|
||||
@@ -50,6 +50,16 @@ TYPESENSE_URL=http://localhost:8108
|
||||
TYPESENSE_API_KEY=modrinth
|
||||
TYPESENSE_INDEX_PREFIX=labrinth
|
||||
TYPESENSE_IMPORT_BATCH_SIZE=5000
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY=name,indexed_name,slug,author,indexed_author,summary
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY_WEIGHTS=[15,15,10,3,3,1]
|
||||
SEARCH_TYPESENSE_DEFAULT_PREFIX=[true,true,true,true,true,true]
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_EXACT_MATCH=true
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_NUM_MATCHING_FIELDS=false
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_TOKEN_POSITIONS=true
|
||||
SEARCH_TYPESENSE_DEFAULT_DROP_TOKENS_THRESHOLD=0
|
||||
SEARCH_TYPESENSE_DEFAULT_TEXT_MATCH_TYPE=max_weight
|
||||
SEARCH_TYPESENSE_DEFAULT_BUCKETING='{"buckets":5}'
|
||||
SEARCH_TYPESENSE_DEFAULT_MAX_CANDIDATES=24
|
||||
|
||||
REDIS_MODE=standalone
|
||||
REDIS_CONNECTION_TYPE=pooled
|
||||
|
||||
@@ -216,6 +216,27 @@ vars! {
|
||||
TYPESENSE_IMPORT_BATCH_SIZE: usize = 5000usize;
|
||||
TYPESENSE_DELETE_BATCH_SIZE: usize = 10_000usize;
|
||||
TYPESENSE_USE_CACHE: bool = true;
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY: StringCsv = StringCsv(vec![
|
||||
"name".into(),
|
||||
"indexed_name".into(),
|
||||
"slug".into(),
|
||||
"author".into(),
|
||||
"indexed_author".into(),
|
||||
"summary".into(),
|
||||
]);
|
||||
SEARCH_TYPESENSE_DEFAULT_QUERY_BY_WEIGHTS: Json<Vec<u8>> =
|
||||
Json(vec![15, 15, 10, 3, 3, 1]);
|
||||
SEARCH_TYPESENSE_DEFAULT_PREFIX: Json<Vec<bool>> =
|
||||
Json(vec![true, true, true, true, true, true]);
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_EXACT_MATCH: bool = true;
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_NUM_MATCHING_FIELDS: bool = false;
|
||||
SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_TOKEN_POSITIONS: bool = true;
|
||||
SEARCH_TYPESENSE_DEFAULT_DROP_TOKENS_THRESHOLD: usize = 0usize;
|
||||
SEARCH_TYPESENSE_DEFAULT_TEXT_MATCH_TYPE: crate::search::backend::typesense::TextMatchType =
|
||||
crate::search::backend::typesense::TextMatchType::MaxWeight;
|
||||
SEARCH_TYPESENSE_DEFAULT_BUCKETING: Json<crate::search::backend::typesense::Bucketing> =
|
||||
Json(crate::search::backend::typesense::Bucketing::Buckets(5));
|
||||
SEARCH_TYPESENSE_DEFAULT_MAX_CANDIDATES: usize = 24usize;
|
||||
|
||||
// storage
|
||||
STORAGE_BACKEND: crate::file_hosting::FileHostKind = crate::file_hosting::FileHostKind::Local;
|
||||
|
||||
@@ -191,8 +191,9 @@ pub enum Bucketing {
|
||||
BucketSize(u64),
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default, strum::EnumString)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
pub enum TextMatchType {
|
||||
MaxScore,
|
||||
#[default]
|
||||
@@ -232,9 +233,9 @@ pub struct RequestConfig {
|
||||
pub prioritize_token_positions: bool,
|
||||
#[serde(default = "default_drop_tokens_threshold")]
|
||||
pub drop_tokens_threshold: usize,
|
||||
#[serde(default)]
|
||||
#[serde(default = "default_text_match_type")]
|
||||
pub text_match_type: TextMatchType,
|
||||
#[serde(default)]
|
||||
#[serde(default = "default_bucketing")]
|
||||
pub bucketing: Bucketing,
|
||||
#[serde(default = "default_max_candidates")]
|
||||
pub max_candidates: usize,
|
||||
@@ -251,55 +252,51 @@ impl Default for RequestConfig {
|
||||
default_prioritize_num_matching_fields(),
|
||||
prioritize_token_positions: default_prioritize_token_positions(),
|
||||
drop_tokens_threshold: default_drop_tokens_threshold(),
|
||||
text_match_type: TextMatchType::default(),
|
||||
bucketing: Bucketing::default(),
|
||||
text_match_type: default_text_match_type(),
|
||||
bucketing: default_bucketing(),
|
||||
max_candidates: default_max_candidates(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn default_query_by() -> Vec<String> {
|
||||
[
|
||||
"name",
|
||||
"indexed_name",
|
||||
"slug",
|
||||
"author",
|
||||
"indexed_author",
|
||||
"summary",
|
||||
]
|
||||
.into_iter()
|
||||
.map(str::to_string)
|
||||
.collect()
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_QUERY_BY.0.clone()
|
||||
}
|
||||
|
||||
fn default_query_by_weights() -> Vec<u8> {
|
||||
vec![15, 15, 10, 3, 3, 1]
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_QUERY_BY_WEIGHTS.0.clone()
|
||||
}
|
||||
|
||||
fn default_prefix() -> Vec<bool> {
|
||||
vec![true, true, true, true, true, true]
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_PREFIX.0.clone()
|
||||
}
|
||||
|
||||
const fn default_prioritize_exact_match() -> bool {
|
||||
true
|
||||
fn default_prioritize_exact_match() -> bool {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_EXACT_MATCH
|
||||
}
|
||||
|
||||
const fn default_prioritize_num_matching_fields() -> bool {
|
||||
false
|
||||
fn default_prioritize_num_matching_fields() -> bool {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_NUM_MATCHING_FIELDS
|
||||
}
|
||||
|
||||
const fn default_prioritize_token_positions() -> bool {
|
||||
true
|
||||
// false
|
||||
fn default_prioritize_token_positions() -> bool {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_PRIORITIZE_TOKEN_POSITIONS
|
||||
}
|
||||
|
||||
const fn default_drop_tokens_threshold() -> usize {
|
||||
0
|
||||
// 1
|
||||
fn default_drop_tokens_threshold() -> usize {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_DROP_TOKENS_THRESHOLD
|
||||
}
|
||||
|
||||
const fn default_max_candidates() -> usize {
|
||||
8
|
||||
fn default_text_match_type() -> TextMatchType {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_TEXT_MATCH_TYPE.clone()
|
||||
}
|
||||
|
||||
fn default_bucketing() -> Bucketing {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_BUCKETING.0.clone()
|
||||
}
|
||||
|
||||
fn default_max_candidates() -> usize {
|
||||
ENV.SEARCH_TYPESENSE_DEFAULT_MAX_CANDIDATES
|
||||
}
|
||||
|
||||
impl TypesenseConfig {
|
||||
|
||||
Reference in New Issue
Block a user