Skip to main content

laurus-python

PyPI License: MIT

Python bindings for the Laurus search engine. Provides lexical search, vector search, and hybrid search from Python via a native Rust extension built with PyO3 and Maturin.

Features

  • Lexical Search -- Full-text search powered by an inverted index with BM25 scoring
  • Vector Search -- Approximate nearest neighbor (ANN) search using Flat, HNSW, or IVF indexes
  • Hybrid Search -- Combine lexical and vector results with fusion algorithms (RRF, WeightedSum)
  • Rich Query DSL -- Term, Phrase, Fuzzy, Wildcard, NumericRange, Geo, Boolean, Span queries
  • Text Analysis -- Tokenizers, filters, stemmers, and synonym expansion
  • Flexible Storage -- In-memory (ephemeral) or file-based (persistent) indexes
  • Pythonic API -- Clean, intuitive Python classes with full type information

Installation

pip install laurus

To build from source (requires Rust toolchain):

pip install maturin
maturin develop

Quick Start

import laurus

# Create an in-memory index
index = laurus.Index()

# Index documents
index.put_document("doc1", {"title": "Introduction to Rust", "body": "Systems programming language."})
index.put_document("doc2", {"title": "Python for Data Science", "body": "Data analysis with Python."})
index.commit()

# Search with a DSL string
results = index.search("title:rust", limit=5)
for r in results:
    print(f"[{r.id}] score={r.score:.4f}  {r.document['title']}")

# Search with a query object
results = index.search(laurus.TermQuery("body", "python"), limit=5)

Index Types

In-memory (ephemeral)

index = laurus.Index()

File-based (persistent)

schema = laurus.Schema()
schema.add_text_field("title")
schema.add_text_field("body")
schema.add_hnsw_field("embedding", dimension=384)

index = laurus.Index(path="./myindex", schema=schema)

This writes ./myindex/schema.toml and ./myindex/store/ -- the same layout laurus-cli create index --schema uses, so the directory can be opened by either. Reopening it later only needs the path (schema must be omitted, since it's loaded from the persisted schema.toml):

index = laurus.Index(path="./myindex")

Durability / WAL

A persistent index writes every change to a write-ahead log (WAL). By default the WAL is fsync-ed on every record, so each write is fully durable. Opt into group commit to batch fsync for higher write throughput (a crash can lose up to the last unsynced batch, like SQLite's synchronous = NORMAL):

import laurus

policy = laurus.WalSyncPolicy.group(max_records=4096, max_interval_ms=1000)
index = laurus.Index(path="./myindex", schema=schema, wal_sync_policy=policy)

index.put_document("doc1", {"title": "Hello"})
index.flush_wal()  # force a durable barrier on demand
index.commit()     # also flushes the WAL

Omit wal_sync_policy (or pass laurus.WalSyncPolicy.per_record()) to keep the default per-record durability.

Query Types

Query class Description
TermQuery(field, term) Exact term match
PhraseQuery(field, [terms]) Ordered phrase match
FuzzyQuery(field, term, max_edits) Approximate term match
WildcardQuery(field, pattern) Wildcard pattern match (*, ?)
NumericRangeQuery(field, min, max) Numeric range (int or float)
GeoDistanceQuery.within_radius(field, lat, lon, distance_m) Geo-distance radius search
GeoBoundingBoxQuery.within_bounding_box(field, min_lat, min_lon, max_lat, max_lon) Geo bounding-box search
Geo3dDistanceQuery.within_sphere(field, x, y, z, distance_m) 3D ECEF sphere search
Geo3dBoundingBoxQuery.within_box(field, min_x, min_y, min_z, max_x, max_y, max_z) 3D ECEF AABB search
Geo3dNearestQuery.k_nearest(field, x, y, z, k) 3D ECEF k-nearest neighbours
BooleanQuery(must, should, must_not) Compound boolean logic
SpanNearQuery(field, [terms], slop) Proximity / ordered span match
VectorQuery(field, vector) Pre-computed vector similarity
VectorTextQuery(field, text) Text-to-vector similarity (requires embedder)

Hybrid Search

request = laurus.SearchRequest(
    lexical_query=laurus.TermQuery("body", "rust"),
    vector_query=laurus.VectorQuery("embedding", query_vec),
    fusion=laurus.RRF(k=60.0),
    limit=10,
)
results = index.search(request)

Fusion algorithms

Class Description
RRF(k=60.0) Reciprocal Rank Fusion (rank-based, default for hybrid)
WeightedSum(lexical_weight=0.5, vector_weight=0.5) Score-normalised weighted sum

Text Analysis

syn_dict = laurus.SynonymDictionary()
syn_dict.add_synonym_group(["ml", "machine learning"])

tokenizer = laurus.WhitespaceTokenizer()
filt = laurus.SynonymGraphFilter(syn_dict, keep_original=True, boost=0.8)

tokens = tokenizer.tokenize("ml tutorial")
tokens = filt.apply(tokens)
for tok in tokens:
    print(tok.text, tok.position, tok.boost)

Examples

Usage examples are in the examples/ directory:

Example Description
quickstart.py Basic indexing and full-text search
lexical_search.py All query types (Term, Phrase, Boolean, Fuzzy, Wildcard, Range, Geo, Span)
vector_search.py Semantic similarity search with embeddings
hybrid_search.py Combining lexical and vector search with fusion
synonym_graph_filter.py Synonym expansion in the analysis pipeline
search_with_openai.py Cloud-based embeddings via OpenAI
multimodal_search.py Text-to-image and image-to-image search

Documentation

License

This project is licensed under the MIT License - see the LICENSE file for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

laurus-0.13.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

laurus-0.13.1-cp310-abi3-win_arm64.whl (9.2 MB view details)

Uploaded CPython 3.10+Windows ARM64

laurus-0.13.1-cp310-abi3-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.10+Windows x86-64

laurus-0.13.1-cp310-abi3-manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

laurus-0.13.1-cp310-abi3-manylinux_2_28_aarch64.whl (9.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

laurus-0.13.1-cp310-abi3-macosx_11_0_arm64.whl (9.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

laurus-0.13.1-cp310-abi3-macosx_10_12_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file laurus-0.13.1.tar.gz.

File metadata

  • Download URL: laurus-0.13.1.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.15.0

File hashes

Hashes for laurus-0.13.1.tar.gz
Algorithm Hash digest
SHA256 9f0ff85218f8183dae88c9d347d4d8cc94f66a46babd6c2f2628a0a31873400a
MD5 79d5b7601bfa5b4b45b89e4878db1d83
BLAKE2b-256 b03a0a07ffe63af16ff4474a7c8e76afd44191d53109e5c6ea9230204f76a98b

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: laurus-0.13.1-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 9.2 MB
  • Tags: CPython 3.10+, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.15.0

File hashes

Hashes for laurus-0.13.1-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 061c9404e34c28f492b1d018777fd3c96791653496cea30e02e30887b0c5f0e1
MD5 869847d8cb9674827b2a75991e6d02bd
BLAKE2b-256 e9028c5dacc6399ab435806dc120bb293c3cee45bc36889c187df8de07be9a89

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: laurus-0.13.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 9.6 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.15.0

File hashes

Hashes for laurus-0.13.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5d45f4e45ac3cf38ebe596b882f78fd146313ff74195e4fa80271ce8a464fb8b
MD5 ddd975c06e39883d660f7e217ce74c0b
BLAKE2b-256 36b8e06e2eb61aa7afc26085244dddd58c678b77f652485f1e9e3248d5738e1c

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for laurus-0.13.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ada80fb7642294facb48dff6b1fee4964ba1ea8737d9be585e52a54957868451
MD5 62cd39275539cc44c060f4129a798e9c
BLAKE2b-256 1c894411aab4c0393d22abc167651a25b61b6af51b40e3dc74a0f98f5fda7a04

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for laurus-0.13.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1cc5c0ec1846f89de6c7c5056135b41c9434fd23832726a6f2943d45d770ee48
MD5 2ab429a66915082008b6f2090828f749
BLAKE2b-256 09e6e42560a56878ac54dda274224c635709a2671f2e84958d034a67e42d199b

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for laurus-0.13.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac20239c389ac2b0b86dfaa08f210c0bb5fc2606fd53d31bcac3653e5da0cce1
MD5 146db9597be3fb52e56d712280371ced
BLAKE2b-256 b227c8484344961fc0b3b1e04002e0d47dedc25d09482330bc3038b739c3dace

See more details on using hashes here.

File details

Details for the file laurus-0.13.1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for laurus-0.13.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 df24c0a1a44a59b4392ea08d512d0ddf7e37ff57720f78cdf891cf474a409ceb
MD5 5bb417de79b2cf7eda8e0b2f9069bd8d
BLAKE2b-256 fd4d7588add6a18ecb5dd7c393177024eb2f7bcf3e452dbfde5a4dd8dcf42250

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.13.1 This release

7 files

0.13.0

7 files

0.12.1

7 files

0.12.0

7 files

0.11.0

7 files

0.10.0

7 files

0.9.0

7 files

0.8.0

7 files

0.7.0

7 files

0.6.0

7 files

0.5.0

7 files

0.4.2

7 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page