diff --git a/examples/geo_json.rs b/examples/geo_json.rs index adf71e1f8..5829c22d2 100644 --- a/examples/geo_json.rs +++ b/examples/geo_json.rs @@ -40,7 +40,16 @@ fn main() -> tantivy::Result<()> { let field = schema.get_field("geometry").unwrap(); let query = SpatialQuery::new( field, - [GeoPoint { lon:-99.49, lat: 45.56}, GeoPoint {lon:-99.45, lat: 45.59}], + [ + GeoPoint { + lon: -99.49, + lat: 45.56, + }, + GeoPoint { + lon: -99.45, + lat: 45.59, + }, + ], tantivy::query::SpatialQueryType::Intersects, ); let hits = searcher.search(&query, &TopDocs::with_limit(10).order_by_score())?; diff --git a/src/fastfield/mod.rs b/src/fastfield/mod.rs index 0edd118c4..f01e891f5 100644 --- a/src/fastfield/mod.rs +++ b/src/fastfield/mod.rs @@ -699,18 +699,24 @@ mod tests { let index = Index::create_in_ram(schema); let mut index_writer = index.writer_for_tests().unwrap(); index_writer.set_merge_policy(Box::new(NoMergePolicy)); - index_writer.add_document(doc!( - date_field => DateTime::from_u64(1i64.to_u64()), - multi_date_field => DateTime::from_u64(2i64.to_u64()), - multi_date_field => DateTime::from_u64(3i64.to_u64()) - )).unwrap(); - index_writer.add_document(doc!( - date_field => DateTime::from_u64(4i64.to_u64()) - )).unwrap(); - index_writer.add_document(doc!( - multi_date_field => DateTime::from_u64(5i64.to_u64()), - multi_date_field => DateTime::from_u64(6i64.to_u64()) - )).unwrap(); + index_writer + .add_document(doc!( + date_field => DateTime::from_u64(1i64.to_u64()), + multi_date_field => DateTime::from_u64(2i64.to_u64()), + multi_date_field => DateTime::from_u64(3i64.to_u64()) + )) + .unwrap(); + index_writer + .add_document(doc!( + date_field => DateTime::from_u64(4i64.to_u64()) + )) + .unwrap(); + index_writer + .add_document(doc!( + multi_date_field => DateTime::from_u64(5i64.to_u64()), + multi_date_field => DateTime::from_u64(6i64.to_u64()) + )) + .unwrap(); index_writer.commit().unwrap(); let reader = index.reader().unwrap(); let searcher = reader.searcher(); diff --git a/src/index/segment_reader.rs b/src/index/segment_reader.rs index f361e8c27..1afe55b2b 100644 --- a/src/index/segment_reader.rs +++ b/src/index/segment_reader.rs @@ -181,12 +181,11 @@ impl SegmentReader { let fieldnorm_data = segment.open_read(SegmentComponent::FieldNorms)?; let fieldnorm_readers = FieldNormReaders::open(fieldnorm_data)?; let spatial_readers = if schema.contains_spatial_field() { - let spatial_data = segment.open_read(SegmentComponent::Spatial)?; - SpatialReaders::open(spatial_data)? - } else { - SpatialReaders::empty() - }; + SpatialReaders::open(spatial_data)? + } else { + SpatialReaders::empty() + }; let original_bitset = if segment.meta().has_deletes() { let alive_doc_file_slice = segment.open_read(SegmentComponent::Delete)?; diff --git a/src/indexer/merger.rs b/src/indexer/merger.rs index 60c827ec1..6af60d361 100644 --- a/src/indexer/merger.rs +++ b/src/indexer/merger.rs @@ -546,7 +546,7 @@ impl IndexMerger { let Some(mut spatial_serializer) = serializer.extract_spatial_serializer() else { // The schema does not contain any spatial field. - return Ok(()) + return Ok(()); }; let mut segment_mappings: Vec>> = Vec::new(); @@ -592,19 +592,19 @@ impl IndexMerger { // No need to fsync here. This file is not here for persistency. } } - for (field, temp_file) in temp_files { - // Memory map the triangle file. - use memmap2::MmapOptions; - let mmap = unsafe { MmapOptions::new().map_mut(temp_file.as_file())? }; - // Cast to &[Triangle] slice - let triangle_count = mmap.len() / std::mem::size_of::(); - let triangles = unsafe { - std::slice::from_raw_parts_mut(mmap.as_ptr() as *mut Triangle, triangle_count) - }; - // Get spatial writer and rebuild block kd-tree. - spatial_serializer.serialize_field(field, triangles)?; - } - spatial_serializer.close()?; + for (field, temp_file) in temp_files { + // Memory map the triangle file. + use memmap2::MmapOptions; + let mmap = unsafe { MmapOptions::new().map_mut(temp_file.as_file())? }; + // Cast to &[Triangle] slice + let triangle_count = mmap.len() / std::mem::size_of::(); + let triangles = unsafe { + std::slice::from_raw_parts_mut(mmap.as_ptr() as *mut Triangle, triangle_count) + }; + // Get spatial writer and rebuild block kd-tree. + spatial_serializer.serialize_field(field, triangles)?; + } + spatial_serializer.close()?; Ok(()) } diff --git a/src/spatial/geometry.rs b/src/spatial/geometry.rs index 4ada3360e..091f9688c 100644 --- a/src/spatial/geometry.rs +++ b/src/spatial/geometry.rs @@ -189,7 +189,9 @@ impl Geometry { polygon .iter() .map(|ring| { - Value::Array(ring.iter().map(|p| json!([p.lon, p.lat])).collect()) + Value::Array( + ring.iter().map(|p| json!([p.lon, p.lat])).collect(), + ) }) .collect(), ) @@ -400,10 +402,7 @@ impl BinarySerializable for Geometry { } } -fn serialize_line_string( - line: &[GeoPoint], - writer: &mut W, -) -> io::Result<()> { +fn serialize_line_string(line: &[GeoPoint], writer: &mut W) -> io::Result<()> { BinarySerializable::serialize(&VInt(line.len() as u64), writer)?; let mut lon = Vec::new(); let mut lat = Vec::new(); @@ -453,7 +452,10 @@ fn deserialize_line_string(reader: &mut R) -> io::Result> let lat: Vec = decompress_f64(&lat_bytes, point_count); let mut line_string: Vec = Vec::new(); for offset in 0..point_count { - line_string.push(GeoPoint { lon: lon[offset], lat: lat[offset] }); + line_string.push(GeoPoint { + lon: lon[offset], + lat: lat[offset], + }); } Ok(line_string) } @@ -476,7 +478,10 @@ fn deserialize_polygon(reader: &mut R) -> io::Result> for point_count in rings { let mut ring = Vec::new(); for _ in 0..point_count { - ring.push(GeoPoint { lon: lon[offset], lat: lat[offset] }); + ring.push(GeoPoint { + lon: lon[offset], + lat: lat[offset], + }); offset += 1; } polygon.push(ring); diff --git a/src/spatial/point.rs b/src/spatial/point.rs index 790fbde90..93981b2ad 100644 --- a/src/spatial/point.rs +++ b/src/spatial/point.rs @@ -1,4 +1,3 @@ - /// A point in the geographical coordinate system. #[derive(Debug, Clone, Copy, PartialEq)] pub struct GeoPoint { diff --git a/src/spatial/writer.rs b/src/spatial/writer.rs index 384afb83e..5c8ff87e2 100644 --- a/src/spatial/writer.rs +++ b/src/spatial/writer.rs @@ -95,11 +95,7 @@ fn append_point(triangles: &mut Vec, doc_id: DocId, point: GeoPoint) { triangles.push(Triangle::from_point(doc_id, point.0, point.1)); } -fn append_line_string( - triangles: &mut Vec, - doc_id: DocId, - line_string: Vec, -) { +fn append_line_string(triangles: &mut Vec, doc_id: DocId, line_string: Vec) { let mut previous = as_point_i32(line_string[0]); for point in line_string.into_iter().skip(1) { let point = as_point_i32(point);