hermes_core/segment/
mod.rs1mod 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 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 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 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 let doc = reader.doc(0).await.unwrap().unwrap();
60 assert_eq!(doc.get_first(title).unwrap().as_text(), Some("Hello World"));
61 }
62}