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