Skip to main content

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;
23
24// Re-exports from dsl
25pub use dsl::{
26    Document, Field, FieldDef, FieldEntry, FieldType, FieldValue, IndexDef, QueryLanguageParser,
27    Schema, SchemaBuilder, SdlParser, parse_sdl, parse_single_index,
28};
29
30// Backwards compatibility alias
31pub mod schema {
32    pub use crate::dsl::{
33        Document, Field, FieldEntry, FieldType, FieldValue, Schema, SchemaBuilder,
34    };
35}
36
37// Re-exports from structures
38pub use structures::{
39    AsyncSSTableReader, BlockPostingList, HorizontalBP128Iterator, HorizontalBP128PostingList,
40    PostingList, PostingListIterator, SSTableValue, TERMINATED, TermInfo,
41};
42
43// Re-exports from directories
44#[cfg(feature = "native")]
45pub use directories::FsDirectory;
46#[cfg(feature = "http")]
47pub use directories::HttpDirectory;
48#[cfg(feature = "native")]
49pub use directories::MmapDirectory;
50pub use directories::{
51    AsyncFileRead, CachingDirectory, Directory, DirectoryWriter, FileSlice, LazyFileHandle,
52    LazyFileSlice, OwnedBytes, RamDirectory, SliceCacheStats, SliceCachingDirectory,
53};
54
55/// Default directory type for native builds - uses memory-mapped files for efficient access
56#[cfg(feature = "native")]
57pub type DefaultDirectory = MmapDirectory;
58
59// Re-exports from segment
60pub use segment::{
61    AsyncSegmentReader, AsyncStoreReader, FieldStats, SegmentId, SegmentMeta, SegmentReader,
62};
63#[cfg(feature = "native")]
64pub use segment::{SegmentBuilder, SegmentBuilderConfig, SegmentBuilderStats};
65
66// Re-exports from query
67pub use query::{
68    Bm25Params, BooleanQuery, BoostQuery, Query, ScoredDoc, Scorer, SearchHit, SearchResponse,
69    SearchResult, TermQuery, TopKCollector, WandExecutor, WandOrQuery, search_segment,
70};
71
72// Re-exports from tokenizer
73pub use tokenizer::{
74    BoxedTokenizer, Language, LanguageAwareTokenizer, LowercaseTokenizer, MultiLanguageStemmer,
75    SimpleTokenizer, StemmerTokenizer, Token, Tokenizer, TokenizerRegistry, parse_language,
76};
77
78// Re-exports from other modules
79pub use directories::SLICE_CACHE_EXTENSION;
80pub use error::{Error, Result};
81pub use index::{Index, IndexConfig, SLICE_CACHE_FILENAME};
82#[cfg(feature = "native")]
83pub use index::{IndexWriter, warmup_and_save_slice_cache};
84#[cfg(feature = "native")]
85pub use index::{
86    IndexingStats, SchemaConfig, SchemaFieldConfig, create_index_at_path, create_index_from_sdl,
87    index_documents_from_reader, index_json_document, parse_schema,
88};
89
90// Re-exports from merge
91#[cfg(feature = "native")]
92pub use merge::SegmentManager;
93pub use merge::{MergeCandidate, MergePolicy, NoMergePolicy, SegmentInfo, TieredMergePolicy};
94
95pub type DocId = u32;
96pub type TermFreq = u32;
97pub type Score = f32;