mirror of
https://github.com/modrinth/code.git
synced 2026-08-28 10:34:53 +00:00
fix: search indexing and schema changes (#7090)
* fix: incremental indexing uses latest db data * dependent search fields
This commit is contained in:
@@ -100,7 +100,7 @@ impl BackgroundTask {
|
|||||||
}
|
}
|
||||||
IncrementalIndexSearch => {
|
IncrementalIndexSearch => {
|
||||||
crate::search::incremental::consume::run(
|
crate::search::incremental::consume::run(
|
||||||
ro_pool,
|
pool,
|
||||||
redis_pool,
|
redis_pool,
|
||||||
search_backend,
|
search_backend,
|
||||||
kafka_client,
|
kafka_client,
|
||||||
|
|||||||
@@ -688,6 +688,10 @@ impl Elasticsearch {
|
|||||||
"compatible_dependency_project_ids": {
|
"compatible_dependency_project_ids": {
|
||||||
"type": "keyword"
|
"type": "keyword"
|
||||||
},
|
},
|
||||||
|
"required_dependency_project_ids": {"type": "keyword"},
|
||||||
|
"optional_dependency_project_ids": {"type": "keyword"},
|
||||||
|
"embedded_dependency_project_ids": {"type": "keyword"},
|
||||||
|
"incompatible_dependency_project_ids": {"type": "keyword"},
|
||||||
"project_loader_fields": {
|
"project_loader_fields": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"enabled": false
|
"enabled": false
|
||||||
|
|||||||
@@ -715,6 +715,40 @@ impl SearchField {
|
|||||||
optional: true,
|
optional: true,
|
||||||
token_separators: &["-"],
|
token_separators: &["-"],
|
||||||
},
|
},
|
||||||
|
SearchField::RequiredDependencyProjectIds => TypesenseFieldSpec {
|
||||||
|
path: "required_dependency_project_ids",
|
||||||
|
ty: "string[]",
|
||||||
|
facet: true,
|
||||||
|
sort: false,
|
||||||
|
optional: true,
|
||||||
|
token_separators: &["-"],
|
||||||
|
},
|
||||||
|
SearchField::OptionalDependencyProjectIds => TypesenseFieldSpec {
|
||||||
|
path: "optional_dependency_project_ids",
|
||||||
|
ty: "string[]",
|
||||||
|
facet: true,
|
||||||
|
sort: false,
|
||||||
|
optional: true,
|
||||||
|
token_separators: &["-"],
|
||||||
|
},
|
||||||
|
SearchField::EmbeddedDependencyProjectIds => TypesenseFieldSpec {
|
||||||
|
path: "embedded_dependency_project_ids",
|
||||||
|
ty: "string[]",
|
||||||
|
facet: true,
|
||||||
|
sort: false,
|
||||||
|
optional: true,
|
||||||
|
token_separators: &["-"],
|
||||||
|
},
|
||||||
|
SearchField::IncompatibleDependencyProjectIds => {
|
||||||
|
TypesenseFieldSpec {
|
||||||
|
path: "incompatible_dependency_project_ids",
|
||||||
|
ty: "string[]",
|
||||||
|
facet: true,
|
||||||
|
sort: false,
|
||||||
|
optional: true,
|
||||||
|
token_separators: &["-"],
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,6 +517,34 @@ async fn build_search_documents(
|
|||||||
})
|
})
|
||||||
.map(|dependency| dependency.project_id.clone())
|
.map(|dependency| dependency.project_id.clone())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
let required_dependency_project_ids = dependencies
|
||||||
|
.iter()
|
||||||
|
.filter(|dependency| {
|
||||||
|
dependency.dependency_type == DependencyType::Required
|
||||||
|
})
|
||||||
|
.map(|dependency| dependency.project_id.clone())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let optional_dependency_project_ids = dependencies
|
||||||
|
.iter()
|
||||||
|
.filter(|dependency| {
|
||||||
|
dependency.dependency_type == DependencyType::Optional
|
||||||
|
})
|
||||||
|
.map(|dependency| dependency.project_id.clone())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let embedded_dependency_project_ids = dependencies
|
||||||
|
.iter()
|
||||||
|
.filter(|dependency| {
|
||||||
|
dependency.dependency_type == DependencyType::Embedded
|
||||||
|
})
|
||||||
|
.map(|dependency| dependency.project_id.clone())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let incompatible_dependency_project_ids = dependencies
|
||||||
|
.iter()
|
||||||
|
.filter(|dependency| {
|
||||||
|
dependency.dependency_type == DependencyType::Incompatible
|
||||||
|
})
|
||||||
|
.map(|dependency| dependency.project_id.clone())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
if let Some(versions) = versions.remove(&project.id) {
|
if let Some(versions) = versions.remove(&project.id) {
|
||||||
let Some(latest_version) = versions.iter().max_by(|a, b| {
|
let Some(latest_version) = versions.iter().max_by(|a, b| {
|
||||||
@@ -731,6 +759,10 @@ async fn build_search_documents(
|
|||||||
color: project.color.map(|x| x as u32),
|
color: project.color.map(|x| x as u32),
|
||||||
dependency_project_ids,
|
dependency_project_ids,
|
||||||
compatible_dependency_project_ids,
|
compatible_dependency_project_ids,
|
||||||
|
required_dependency_project_ids,
|
||||||
|
optional_dependency_project_ids,
|
||||||
|
embedded_dependency_project_ids,
|
||||||
|
incompatible_dependency_project_ids,
|
||||||
dependencies,
|
dependencies,
|
||||||
project_loader_fields,
|
project_loader_fields,
|
||||||
loader_fields,
|
loader_fields,
|
||||||
|
|||||||
@@ -218,6 +218,10 @@ pub enum SearchField {
|
|||||||
MinecraftJavaServerPingData,
|
MinecraftJavaServerPingData,
|
||||||
DependencyProjectIds,
|
DependencyProjectIds,
|
||||||
CompatibleDependencyProjectIds,
|
CompatibleDependencyProjectIds,
|
||||||
|
RequiredDependencyProjectIds,
|
||||||
|
OptionalDependencyProjectIds,
|
||||||
|
EmbeddedDependencyProjectIds,
|
||||||
|
IncompatibleDependencyProjectIds,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
@@ -289,6 +293,14 @@ pub struct UploadSearchProject {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub compatible_dependency_project_ids: Vec<String>,
|
pub compatible_dependency_project_ids: Vec<String>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
pub required_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub optional_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub embedded_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub incompatible_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
pub dependencies: Vec<SearchProjectDependency>,
|
pub dependencies: Vec<SearchProjectDependency>,
|
||||||
|
|
||||||
// Hidden fields to get the Project model out of the search results.
|
// Hidden fields to get the Project model out of the search results.
|
||||||
@@ -387,6 +399,14 @@ pub struct ResultSearchProject {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub compatible_dependency_project_ids: Vec<String>,
|
pub compatible_dependency_project_ids: Vec<String>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
pub required_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub optional_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub embedded_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub incompatible_dependency_project_ids: Vec<String>,
|
||||||
|
#[serde(default)]
|
||||||
pub dependencies: Vec<SearchProjectDependency>,
|
pub dependencies: Vec<SearchProjectDependency>,
|
||||||
|
|
||||||
// Hidden fields to get the Project model out of the search results.
|
// Hidden fields to get the Project model out of the search results.
|
||||||
@@ -429,6 +449,14 @@ impl From<UploadSearchProject> for ResultSearchProject {
|
|||||||
dependency_project_ids: source.dependency_project_ids,
|
dependency_project_ids: source.dependency_project_ids,
|
||||||
compatible_dependency_project_ids: source
|
compatible_dependency_project_ids: source
|
||||||
.compatible_dependency_project_ids,
|
.compatible_dependency_project_ids,
|
||||||
|
required_dependency_project_ids: source
|
||||||
|
.required_dependency_project_ids,
|
||||||
|
optional_dependency_project_ids: source
|
||||||
|
.optional_dependency_project_ids,
|
||||||
|
embedded_dependency_project_ids: source
|
||||||
|
.embedded_dependency_project_ids,
|
||||||
|
incompatible_dependency_project_ids: source
|
||||||
|
.incompatible_dependency_project_ids,
|
||||||
dependencies: source.dependencies,
|
dependencies: source.dependencies,
|
||||||
loaders: source.loaders,
|
loaders: source.loaders,
|
||||||
project_loader_fields: source.project_loader_fields,
|
project_loader_fields: source.project_loader_fields,
|
||||||
|
|||||||
Reference in New Issue
Block a user