Skip to main content

hermes_core/segment/
mod.rs

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