mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-30 15:36:28 +00:00 
			
		
		
		
	Add some documentation in modules
This commit is contained in:
		| @@ -28,6 +28,7 @@ impl From<Vec<String>> for AttributePatterns { | ||||
| } | ||||
|  | ||||
| impl AttributePatterns { | ||||
|     /// Match a string against the attribute patterns using the match_pattern function. | ||||
|     pub fn match_str(&self, str: &str) -> PatternMatch { | ||||
|         let mut pattern_match = PatternMatch::NoMatch; | ||||
|         for pattern in &self.patterns { | ||||
| @@ -41,22 +42,35 @@ impl AttributePatterns { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Match a string against a pattern. | ||||
| /// | ||||
| /// The pattern can be a wildcard, a prefix, a suffix or an exact match. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `pattern` - The pattern to match against. | ||||
| /// * `str` - The string to match against the pattern. | ||||
| fn match_pattern(pattern: &str, str: &str) -> PatternMatch { | ||||
|     // If the pattern is a wildcard, return Match | ||||
|     if pattern == "*" { | ||||
|         return PatternMatch::Match; | ||||
|     } else if pattern.starts_with('*') && pattern.ends_with('*') { | ||||
|         // If the starts and ends with a wildcard, return Match if the string contains the pattern without the wildcards | ||||
|         if str.contains(&pattern[1..pattern.len() - 1]) { | ||||
|             return PatternMatch::Match; | ||||
|         } | ||||
|     } else if let Some(pattern) = pattern.strip_prefix('*') { | ||||
|         // If the pattern starts with a wildcard, return Match if the string ends with the pattern without the wildcard | ||||
|         if str.ends_with(pattern) { | ||||
|             return PatternMatch::Match; | ||||
|         } | ||||
|     } else if let Some(pattern) = pattern.strip_suffix('*') { | ||||
|         // If the pattern ends with a wildcard, return Match if the string starts with the pattern without the wildcard | ||||
|         if str.starts_with(pattern) { | ||||
|             return PatternMatch::Match; | ||||
|         } | ||||
|     } else if pattern == str { | ||||
|         // If the pattern is exactly the string, return Match | ||||
|         return PatternMatch::Match; | ||||
|     } | ||||
|  | ||||
| @@ -68,6 +82,15 @@ fn match_pattern(pattern: &str, str: &str) -> PatternMatch { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Match a field against a pattern using the legacy behavior. | ||||
| /// | ||||
| /// A field matches a pattern if it is a parent of the pattern or if it is the pattern itself. | ||||
| /// This behavior is used to match the sortable attributes, the searchable attributes and the filterable attributes rules `Field`. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `pattern` - The pattern to match against. | ||||
| /// * `field` - The field to match against the pattern. | ||||
| pub fn match_field_legacy(pattern: &str, field: &str) -> PatternMatch { | ||||
|     if is_faceted_by(field, pattern) { | ||||
|         // If the field matches the pattern or is a nested field of the pattern, return Match (legacy behavior) | ||||
|   | ||||
| @@ -17,20 +17,30 @@ pub enum FilterableAttributesRule { | ||||
| } | ||||
|  | ||||
| impl FilterableAttributesRule { | ||||
|     /// Match a field against the filterable attributes rule. | ||||
|     pub fn match_str(&self, field: &str) -> PatternMatch { | ||||
|         match self { | ||||
|             // If the rule is a field, match the field against the pattern using the legacy behavior | ||||
|             FilterableAttributesRule::Field(pattern) => match_field_legacy(pattern, field), | ||||
|             // If the rule is a pattern, match the field against the pattern using the new behavior | ||||
|             FilterableAttributesRule::Pattern(patterns) => patterns.match_str(field), | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Check if the rule is a geo field. | ||||
|     /// | ||||
|     /// prefer using `index.is_geo_enabled`, `index.is_geo_filtering_enabled` or `index.is_geo_sorting_enabled` | ||||
|     /// to check if the geo feature is enabled. | ||||
|     pub fn has_geo(&self) -> bool { | ||||
|         matches!(self, FilterableAttributesRule::Field(field_name) if field_name == RESERVED_GEO_FIELD_NAME) | ||||
|     } | ||||
|  | ||||
|     /// Get the features of the rule. | ||||
|     pub fn features(&self) -> FilterableAttributesFeatures { | ||||
|         match self { | ||||
|             // If the rule is a field, return the legacy default features | ||||
|             FilterableAttributesRule::Field(_) => FilterableAttributesFeatures::legacy_default(), | ||||
|             // If the rule is a pattern, return the features of the pattern | ||||
|             FilterableAttributesRule::Pattern(patterns) => patterns.features(), | ||||
|         } | ||||
|     } | ||||
| @@ -66,10 +76,15 @@ pub struct FilterableAttributesFeatures { | ||||
| } | ||||
|  | ||||
| impl FilterableAttributesFeatures { | ||||
|     /// Create a new `FilterableAttributesFeatures` with the legacy default features. | ||||
|     /// | ||||
|     /// This is the default behavior for `FilterableAttributesRule::Field`. | ||||
|     /// This will set the facet search to true and activate all the filter operators. | ||||
|     pub fn legacy_default() -> Self { | ||||
|         Self { facet_search: true, filter: FilterFeatures::legacy_default() } | ||||
|     } | ||||
|  | ||||
|     /// Create a new `FilterableAttributesFeatures` with no features. | ||||
|     pub fn no_features() -> Self { | ||||
|         Self { facet_search: false, filter: FilterFeatures::no_features() } | ||||
|     } | ||||
| @@ -135,6 +150,7 @@ pub struct FilterFeatures { | ||||
| } | ||||
|  | ||||
| impl FilterFeatures { | ||||
|     /// Get the allowed operators for the filter. | ||||
|     pub fn allowed_operators(&self) -> Vec<String> { | ||||
|         if !self.is_filterable() { | ||||
|             return vec![]; | ||||
| @@ -188,10 +204,15 @@ impl FilterFeatures { | ||||
|         self.is_filterable() | ||||
|     } | ||||
|  | ||||
|     /// Create a new `FilterFeatures` with the legacy default features. | ||||
|     /// | ||||
|     /// This is the default behavior for `FilterableAttributesRule::Field`. | ||||
|     /// This will set the equality and comparison to true. | ||||
|     pub fn legacy_default() -> Self { | ||||
|         Self { equality: true, comparison: true } | ||||
|     } | ||||
|  | ||||
|     /// Create a new `FilterFeatures` with no features. | ||||
|     pub fn no_features() -> Self { | ||||
|         Self { equality: false, comparison: false } | ||||
|     } | ||||
| @@ -203,6 +224,15 @@ impl Default for FilterFeatures { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Match a field against a set of filterable attributes rules. | ||||
| /// | ||||
| /// This function will return the set of field names that match the given filter. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `filterable_attributes` - The set of filterable attributes rules to match against. | ||||
| /// * `fields_ids_map` - The map of field names to field ids. | ||||
| /// * `filter` - The filter function to apply to the filterable attributes rules. | ||||
| pub fn filtered_matching_field_names<'fim>( | ||||
|     filterable_attributes: &[FilterableAttributesRule], | ||||
|     fields_ids_map: &'fim FieldsIdsMap, | ||||
| @@ -222,6 +252,14 @@ pub fn filtered_matching_field_names<'fim>( | ||||
|     result | ||||
| } | ||||
|  | ||||
| /// Match a field against a set of filterable attributes rules. | ||||
| /// | ||||
| /// This function will return the features that match the given field name. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `field_name` - The field name to match against. | ||||
| /// * `filterable_attributes` - The set of filterable attributes rules to match against. | ||||
| pub fn matching_features( | ||||
|     field_name: &str, | ||||
|     filterable_attributes: &[FilterableAttributesRule], | ||||
| @@ -234,6 +272,12 @@ pub fn matching_features( | ||||
|     None | ||||
| } | ||||
|  | ||||
| /// Check if a field is filterable calling the method `FilterableAttributesFeatures::is_filterable()`. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `field_name` - The field name to check. | ||||
| /// * `filterable_attributes` - The set of filterable attributes rules to match against. | ||||
| pub fn is_field_filterable( | ||||
|     field_name: &str, | ||||
|     filterable_attributes: &[FilterableAttributesRule], | ||||
| @@ -242,6 +286,12 @@ pub fn is_field_filterable( | ||||
|         .map_or(false, |features| features.is_filterable()) | ||||
| } | ||||
|  | ||||
| /// Check if a field is facet searchable calling the method `FilterableAttributesFeatures::is_facet_searchable()`. | ||||
| /// | ||||
| /// # Arguments | ||||
| /// | ||||
| /// * `field_name` - The field name to check. | ||||
| /// * `filterable_attributes` - The set of filterable attributes rules to match against. | ||||
| pub fn is_field_facet_searchable( | ||||
|     field_name: &str, | ||||
|     filterable_attributes: &[FilterableAttributesRule], | ||||
|   | ||||
		Reference in New Issue
	
	Block a user