hermes_core/segment/
mod.rs

1mod builder;
2mod merger;
3mod reader;
4mod store;
5mod types;
6
7pub use builder::SegmentBuilder;
8pub use merger::{SegmentMerger, delete_segment};
9pub use reader::{AsyncSegmentReader, SegmentReader};
10pub use store::*;
11pub use types::{FieldStats, SegmentFiles, SegmentId, SegmentMeta};
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use crate::directories::RamDirectory;
17    use crate::dsl::SchemaBuilder;
18    use std::sync::Arc;
19
20    #[tokio::test]
21    async fn test_async_segment_reader() {
22        let mut schema_builder = SchemaBuilder::default();
23        let title = schema_builder.add_text_field("title", true, true);
24        let schema = Arc::new(schema_builder.build());
25
26        let dir = RamDirectory::new();
27        let segment_id = SegmentId::new();
28
29        // Build segment using sync builder
30        let mut builder = SegmentBuilder::new((*schema).clone());
31
32        let mut doc = crate::dsl::Document::new();
33        doc.add_text(title, "Hello World");
34        builder.add_document(doc).unwrap();
35
36        let mut doc = crate::dsl::Document::new();
37        doc.add_text(title, "Goodbye World");
38        builder.add_document(doc).unwrap();
39
40        builder.build(&dir, segment_id).await.unwrap();
41
42        // Open with async reader
43        let reader = AsyncSegmentReader::open(&dir, segment_id, schema.clone(), 0, 16)
44            .await
45            .unwrap();
46
47        assert_eq!(reader.num_docs(), 2);
48
49        // Test postings lookup
50        let postings = reader.get_postings(title, b"hello").await.unwrap();
51        assert!(postings.is_some());
52        assert_eq!(postings.unwrap().doc_count(), 1);
53
54        let postings = reader.get_postings(title, b"world").await.unwrap();
55        assert!(postings.is_some());
56        assert_eq!(postings.unwrap().doc_count(), 2);
57
58        // Test document retrieval
59        let doc = reader.doc(0).await.unwrap().unwrap();
60        assert_eq!(doc.get_first(title).unwrap().as_text(), Some("Hello World"));
61    }
62}