hermes_core/segment/
mod.rs

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