hermes_core/segment/
mod.rs1#[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 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 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 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 let doc = reader.doc(0).await.unwrap().unwrap();
64 assert_eq!(doc.get_first(title).unwrap().as_text(), Some("Hello World"));
65 }
66}