diff --git a/core/migrations/00000000003005_create_species_view/up.sql b/core/migrations/00000000003005_create_species_view/up.sql index 5827996..4adae84 100644 --- a/core/migrations/00000000003005_create_species_view/up.sql +++ b/core/migrations/00000000003005_create_species_view/up.sql @@ -13,7 +13,8 @@ SELECT summaries.specimens, summaries.other, summaries.total_genomic, - name_attributes.traits + name_attributes.traits, + vernacular_names.names AS vernacular_names FROM taxa JOIN ( SELECT @@ -41,4 +42,12 @@ LEFT JOIN ( FROM name_attributes JOIN taxon_names ON taxon_names.name_id = name_attributes.name_id GROUP BY taxon_id -) name_attributes ON taxa.id = name_attributes.taxon_id; +) name_attributes ON taxa.id = name_attributes.taxon_id +LEFT JOIN ( + SELECT + taxon_id, + array_agg(vernacular_name) as names + FROM vernacular_names + JOIN taxon_names ON taxon_names.name_id = vernacular_names.name_id + GROUP BY taxon_id +) vernacular_names ON taxa.id = vernacular_names.taxon_id; diff --git a/core/src/models.rs b/core/src/models.rs index 22a9bc5..f0c317d 100644 --- a/core/src/models.rs +++ b/core/src/models.rs @@ -293,6 +293,7 @@ pub struct Species { pub total_genomic: i64, pub traits: Option>, + pub vernacular_names: Option>, } #[derive(Debug, Serialize, Deserialize, Default)] diff --git a/core/src/schema_gnl.rs b/core/src/schema_gnl.rs index 63dbacd..c39161b 100644 --- a/core/src/schema_gnl.rs +++ b/core/src/schema_gnl.rs @@ -122,6 +122,7 @@ diesel::table! { other -> BigInt, total_genomic -> BigInt, traits -> Nullable>, + vernacular_names -> Nullable>, } } diff --git a/tasks/src/search/mod.rs b/tasks/src/search/mod.rs index edd9ef0..21bf21a 100644 --- a/tasks/src/search/mod.rs +++ b/tasks/src/search/mod.rs @@ -120,11 +120,11 @@ fn index_names(schema: &Schema, index: &Index) -> Result<(), Error> { // doc.add_text(synonyms, name); // } // } - // if let Some(names) = &species.vernacular_names { - // for name in names { - // doc.add_text(common_names, name); - // } - // } + if let Some(names) = &species.vernacular_names { + for name in names { + doc.add_text(common_names, name); + } + } if let Some(value) = &species.kingdom { doc.add_text(kingdom, value); } if let Some(value) = &species.phylum { doc.add_text(phylum, value); } diff --git a/tasks/src/search/taxon.rs b/tasks/src/search/taxon.rs index 12a9fb8..9260494 100644 --- a/tasks/src/search/taxon.rs +++ b/tasks/src/search/taxon.rs @@ -26,7 +26,7 @@ pub struct SpeciesDoc { pub canonical_name: String, // pub subspecies: Option>, // pub synonyms: Option>, - // pub vernacular_names: Option>, + pub vernacular_names: Option>, pub kingdom: Option, pub phylum: Option, @@ -50,7 +50,6 @@ pub fn get_species(pool: &PgPool) -> Result, Error> { let docs = species::table // .left_join(synonyms::table) - // .left_join(common_names::table) .select(( species::id, species::status, @@ -58,7 +57,7 @@ pub fn get_species(pool: &PgPool) -> Result, Error> { species::canonical_name, // species::subspecies, // synonyms::names.nullable(), - // common_names::names.nullable(), + species::vernacular_names, sql::>("classification->>'kingdom'"), sql::>("classification->>'phylum'"),