hermes_core/
lib.rs

1//! Hermes - A minimal async search engine library
2//!
3//! Inspired by tantivy/summavy, this library provides:
4//! - Fully async IO with Directory abstraction for network/local/memory storage
5//! - SSTable-based term dictionary with hot cache and lazy loading
6//! - Bitpacked posting lists with block-level skip info
7//! - Document store with Zstd compression
8//! - Multiple segments with merge support
9//! - Text and numeric field support
10//! - Term, boolean, and boost queries
11//! - BlockWAND / MaxScore query optimizations
12
13pub mod compression;
14pub mod directories;
15pub mod dsl;
16pub mod error;
17pub mod index;
18pub mod merge;
19pub mod query;
20pub mod segment;
21pub mod structures;
22pub mod tokenizer;
23pub mod wand;
24
25// Re-exports from dsl
26pub use dsl::{
27    Document, Field, FieldDef, FieldEntry, FieldType, FieldValue, IndexDef, QueryLanguageParser,
28    Schema, SchemaBuilder, SdlParser, parse_sdl, parse_single_index,
29};
30
31// Backwards compatibility alias
32pub mod schema {
33    pub use crate::dsl::{
34        Document, Field, FieldEntry, FieldType, FieldValue, Schema, SchemaBuilder,
35    };
36}
37
38// Re-exports from structures
39pub use structures::{
40    AsyncSSTableReader, BlockPostingList, HorizontalBP128Iterator, HorizontalBP128PostingList,
41    PostingList, PostingListIterator, SSTableValue, TERMINATED, TermInfo,
42};
43
44// Re-exports from directories
45#[cfg(feature = "native")]
46pub use directories::FsDirectory;
47#[cfg(feature = "http")]
48pub use directories::HttpDirectory;
49#[cfg(feature = "native")]
50pub use directories::MmapDirectory;
51pub use directories::{
52    AsyncFileRead, CachingDirectory, Directory, DirectoryWriter, FileSlice, LazyFileHandle,
53    LazyFileSlice, OwnedBytes, RamDirectory, SliceCacheStats, SliceCachingDirectory,
54};
55
56/// Default directory type for native builds - uses memory-mapped files for efficient access
57#[cfg(feature = "native")]
58pub type DefaultDirectory = MmapDirectory;
59
60// Re-exports from segment
61pub use segment::{
62    AsyncSegmentReader, AsyncStoreReader, FieldStats, SegmentId, SegmentMeta, SegmentReader,
63};
64#[cfg(feature = "native")]
65pub use segment::{SegmentBuilder, SegmentBuilderConfig, SegmentBuilderStats};
66
67// Re-exports from query
68pub use query::{
69    BlockWand, Bm25Params, BooleanQuery, BoostQuery, MaxScoreWand, Query, Scorer, SearchHit,
70    SearchResponse, SearchResult, TermQuery, TopKCollector, WandResult, search_segment,
71};
72
73// Re-exports from tokenizer
74pub use tokenizer::{
75    BoxedTokenizer, Language, LanguageAwareTokenizer, LowercaseTokenizer, MultiLanguageStemmer,
76    SimpleTokenizer, StemmerTokenizer, Token, Tokenizer, TokenizerRegistry, parse_language,
77};
78
79// Re-exports from other modules
80pub use directories::SLICE_CACHE_EXTENSION;
81pub use error::{Error, Result};
82pub use index::{Index, IndexConfig, SLICE_CACHE_FILENAME};
83#[cfg(feature = "native")]
84pub use index::{IndexWriter, warmup_and_save_slice_cache};
85
86// Re-exports from merge
87#[cfg(feature = "native")]
88pub use merge::SegmentManager;
89pub use merge::{MergeCandidate, MergePolicy, NoMergePolicy, SegmentInfo, TieredMergePolicy};
90
91pub type DocId = u32;
92pub type TermFreq = u32;
93pub type Score = f32;