mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-11-04 09:56:28 +00:00 
			
		
		
		
	only flatten an object if it's nested
This commit is contained in:
		@@ -286,9 +286,11 @@ impl<'a, 'i> Transform<'a, 'i> {
 | 
			
		||||
                    })?;
 | 
			
		||||
 | 
			
		||||
                self.original_sorter.insert(&docid.to_be_bytes(), base_obkv)?;
 | 
			
		||||
                let buffer = self.flatten_from_fields_ids_map(KvReader::new(&base_obkv))?;
 | 
			
		||||
 | 
			
		||||
                self.flattened_sorter.insert(docid.to_be_bytes(), &buffer)?;
 | 
			
		||||
                if let Some(buffer) = self.flatten_from_fields_ids_map(KvReader::new(&base_obkv))? {
 | 
			
		||||
                    self.flattened_sorter.insert(docid.to_be_bytes(), &buffer)?;
 | 
			
		||||
                } else {
 | 
			
		||||
                    self.flattened_sorter.insert(docid.to_be_bytes(), base_obkv)?;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                self.new_documents_ids.insert(docid);
 | 
			
		||||
            }
 | 
			
		||||
@@ -300,8 +302,13 @@ impl<'a, 'i> Transform<'a, 'i> {
 | 
			
		||||
            if let Some(flatten) = flattened_document {
 | 
			
		||||
                self.flattened_sorter.insert(docid.to_be_bytes(), &flatten)?;
 | 
			
		||||
            } else {
 | 
			
		||||
                let buffer = self.flatten_from_fields_ids_map(KvReader::new(&obkv_buffer))?;
 | 
			
		||||
                self.flattened_sorter.insert(docid.to_be_bytes(), &buffer)?;
 | 
			
		||||
                if let Some(buffer) =
 | 
			
		||||
                    self.flatten_from_fields_ids_map(KvReader::new(&obkv_buffer))?
 | 
			
		||||
                {
 | 
			
		||||
                    self.flattened_sorter.insert(docid.to_be_bytes(), &buffer)?;
 | 
			
		||||
                } else {
 | 
			
		||||
                    self.flattened_sorter.insert(docid.to_be_bytes(), obkv_buffer.clone())?;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            progress_callback(UpdateIndexingStep::RemapDocumentAddition {
 | 
			
		||||
@@ -326,8 +333,15 @@ impl<'a, 'i> Transform<'a, 'i> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Flatten a document from the fields ids map contained in self and insert the new
 | 
			
		||||
    // created fields.
 | 
			
		||||
    fn flatten_from_fields_ids_map(&mut self, obkv: KvReader<FieldId>) -> Result<Vec<u8>> {
 | 
			
		||||
    // created fields. Returns `None` if the document doesn't need to be flattened.
 | 
			
		||||
    fn flatten_from_fields_ids_map(&mut self, obkv: KvReader<FieldId>) -> Result<Option<Vec<u8>>> {
 | 
			
		||||
        if obkv
 | 
			
		||||
            .iter()
 | 
			
		||||
            .all(|(_, value)| !json_depth_checker::should_flatten_from_unchecked_slice(value))
 | 
			
		||||
        {
 | 
			
		||||
            return Ok(None);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let mut doc = serde_json::Map::new();
 | 
			
		||||
 | 
			
		||||
        for (k, v) in obkv.iter() {
 | 
			
		||||
@@ -357,7 +371,7 @@ impl<'a, 'i> Transform<'a, 'i> {
 | 
			
		||||
            writer.insert(fid, &value)?;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(buffer)
 | 
			
		||||
        Ok(Some(buffer))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Flatten a document from a field mapping generated by [create_fields_mapping]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user