From 32433e7d6cfd4e13b3f7c6f1c38b10b984cb8578 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Sat, 13 Mar 2021 21:27:17 +0100 Subject: [PATCH] Lang aware search indices settings --- components/config/src/config/languages.rs | 6 ++- components/config/src/config/mod.rs | 3 +- components/config/src/lib.rs | 4 +- components/search/src/lib.rs | 56 +++++++++++++---------- 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/components/config/src/config/languages.rs b/components/config/src/config/languages.rs index a40a916b..5defeab9 100644 --- a/components/config/src/config/languages.rs +++ b/components/config/src/config/languages.rs @@ -4,6 +4,7 @@ use errors::{bail, Result}; use serde_derive::{Deserialize, Serialize}; use unic_langid::LanguageIdentifier; +use crate::config::search; use crate::config::taxonomies; #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] @@ -15,9 +16,11 @@ pub struct LanguageOptions { pub description: Option, /// Whether to generate a feed for that language, defaults to `false` pub generate_feed: bool, + pub taxonomies: Vec, /// Whether to generate search index for that language, defaults to `false` pub build_search_index: bool, - pub taxonomies: Vec, + /// The search config, telling what to include in the search index for that language + pub search: search::Search, } impl Default for LanguageOptions { @@ -28,6 +31,7 @@ impl Default for LanguageOptions { generate_feed: false, build_search_index: false, taxonomies: Vec::new(), + search: search::Search::default(), } } } diff --git a/components/config/src/config/mod.rs b/components/config/src/config/mod.rs index cbc6511f..863f89ca 100644 --- a/components/config/src/config/mod.rs +++ b/components/config/src/config/mod.rs @@ -205,6 +205,7 @@ impl Config { generate_feed: self.generate_feed, build_search_index: self.build_search_index, taxonomies: self.taxonomies.clone(), + search: self.search.clone(), }, ); } @@ -290,7 +291,7 @@ impl Config { translations: &self.translations, generate_feed: options.generate_feed, taxonomies: &options.taxonomies, - build_search_index: self.build_search_index, + build_search_index: options.build_search_index, extra: &self.extra, } } diff --git a/components/config/src/lib.rs b/components/config/src/lib.rs index 3b5ff501..4f85fde2 100644 --- a/components/config/src/lib.rs +++ b/components/config/src/lib.rs @@ -3,8 +3,8 @@ pub mod highlighting; mod theme; pub use crate::config::{ - languages::LanguageOptions, link_checker::LinkChecker, slugify::Slugify, taxonomies::Taxonomy, - Config, + languages::LanguageOptions, link_checker::LinkChecker, search::Search, slugify::Slugify, + taxonomies::Taxonomy, Config, }; use errors::Result; diff --git a/components/search/src/lib.rs b/components/search/src/lib.rs index c8314e5a..4daaa761 100644 --- a/components/search/src/lib.rs +++ b/components/search/src/lib.rs @@ -3,7 +3,7 @@ use std::collections::{HashMap, HashSet}; use elasticlunr::{Index, Language}; use lazy_static::lazy_static; -use config::Config; +use config::{Config, Search}; use errors::{bail, Result}; use library::{Library, Section}; @@ -26,17 +26,17 @@ lazy_static! { }; } -fn build_fields(config: &Config) -> Vec { +fn build_fields(search_config: &Search) -> Vec { let mut fields = vec![]; - if config.search.include_title { + if search_config.include_title { fields.push("title".to_owned()); } - if config.search.include_description { + if search_config.include_description { fields.push("description".to_owned()); } - if config.search.include_content { + if search_config.include_content { fields.push("body".to_owned()); } @@ -44,24 +44,24 @@ fn build_fields(config: &Config) -> Vec { } fn fill_index( - config: &Config, + search_config: &Search, title: &Option, description: &Option, content: &str, ) -> Vec { let mut row = vec![]; - if config.search.include_title { + if search_config.include_title { row.push(title.clone().unwrap_or_default()); } - if config.search.include_description { + if search_config.include_description { row.push(description.clone().unwrap_or_default()); } - if config.search.include_content { + if search_config.include_content { let body = AMMONIA.clean(&content).to_string(); - if let Some(truncate_len) = config.search.truncate_content_length { + if let Some(truncate_len) = search_config.truncate_content_length { // Not great for unicode // TODO: fix it like the truncate in Tera match body.char_indices().nth(truncate_len) { @@ -87,19 +87,24 @@ pub fn build_index(lang: &str, library: &Library, config: &Config) -> Result