The Python Way to Elasticsearch

    Simplify Elasticsearch
    Amplify Productivity

     

    Elastro turns Elasticsearch into a high-velocity developer tool that replaces verbose REST calls with focused Python constructs and a unified CLI. Now teams can build, test, and automate faster.

    example.py
    1from elastro import ElasticsearchClient, DocumentManager
    2from elastro.advanced import QueryBuilder
    3 
    4# Initialize and connect
    5client = ElasticsearchClient()
    6client.connect()
    7doc_manager = DocumentManager(client)
    8 
    9# Build queries with QueryBuilder
    10query_builder = QueryBuilder()
    11bool_query = query_builder.bool()
    12bool_query.must(QueryBuilder().match("name", "laptop"))
    13bool_query.must(QueryBuilder().range("price", gte=500, lte=2000))
    14query = query_builder.build()
    15 
    16results = doc_manager.search("products", query)
    17print(f"Found {results['hits']['total']['value']} products!")
    Everything You Need

    Features that make Elasticsearch feel effortless

    From index management to complex aggregations, Elastro provides a complete toolkit for Python developers working with Elasticsearch.

    Index Management

    Create, update, and delete indices with intuitive methods. No more complex JSON mappings.

    Powerful Query Builder

    Build complex queries with a fluent, chainable API. Match, filter, range, and more.

    CLI & API Combined

    Use the command-line for quick operations or integrate seamlessly via Python API.

    Advanced Aggregations

    Powerful aggregation builder for analytics, metrics, and data visualization.

    Datastream Support

    Handle time-series data and datastreams with dedicated management tools.

    Type-Safe with Pydantic

    Built-in validation and type safety using Pydantic models for reliable data handling.

    Reduce Boilerplate
    Lightning Fast
    Production Ready
    Well Documented
    Before & After

    Write cleaner code, faster

    See how Elastro transforms verbose Elasticsearch interactions into elegant, readable Python code.

    Before Elastro
    Traditional elasticsearch-py
    query_before.py
    1from elasticsearch import Elasticsearch
    2 
    3es = Elasticsearch(['http://localhost:9200'])
    4 
    5# Complex nested dictionary structure
    6query = {
    7 "query": {
    8 "bool": {
    9 "must": [
    10 {"match": {"name": "laptop"}},
    11 {"range": {
    12 "price": {
    13 "gte": 500,
    14 "lte": 2000
    15 }
    16 }}
    17 ]
    18 }
    19 },
    20 "sort": [{"rating": {"order": "desc"}}],
    21 "size": 10
    22}
    23 
    24results = es.search(index="products", body=query)

    ❌ Verbose • ❌ Error-prone • ❌ Hard to maintain

    With Elastro
    Clean, fluent API
    query_after.py
    1from elastro import ElasticsearchClient, DocumentManager
    2from elastro.advanced import QueryBuilder
    3 
    4client = ElasticsearchClient()
    5client.connect()
    6doc_manager = DocumentManager(client)
    7 
    8# Clean, builder API
    9query_builder = QueryBuilder()
    10bool_query = query_builder.bool()
    11bool_query.must(QueryBuilder().match("name", "laptop"))
    12bool_query.must(QueryBuilder().range("price", gte=500, lte=2000))
    13query = query_builder.build()
    14 
    15results = doc_manager.search(
    16 "products",
    17 query,
    18 {"sort": [{"rating": {"order": "desc"}}], "size": 10}
    19)

    ✓ Readable • ✓ Type-safe • ✓ Maintainable

    60%
    Less Code
    2x
    Faster Development
    0
    Dict Nesting
    Ready in Seconds

    Get started in one command

    Install Elastro and start simplifying your Elasticsearch operations immediately.

    $ pip install elastro

    Quick Start Example

    quickstart.py
    1from elastro import ElasticsearchClient, IndexManager, DocumentManager
    2from elastro.advanced import QueryBuilder
    3 
    4# Connect to your Elasticsearch cluster
    5client = ElasticsearchClient(
    6 hosts=["http://localhost:9200"]
    7)
    8client.connect()
    9 
    10# Create managers
    11index_manager = IndexManager(client)
    12doc_manager = DocumentManager(client)
    13 
    14# Create an index with mappings
    15index_manager.create(
    16 "my_index",
    17 mappings={
    18 "properties": {
    19 "title": {"type": "text"},
    20 "views": {"type": "integer"}
    21 }
    22 }
    23)
    24 
    25# Index a document
    26doc_manager.index(
    27 "my_index",
    28 id="1",
    29 document={"title": "Hello Elastro!", "views": 100}
    30)
    31 
    32# Search with QueryBuilder
    33query_builder = QueryBuilder()
    34query_builder.match_all()
    35query = query_builder.build()
    36results = doc_manager.search("my_index", query)
    37print(results["hits"]["hits"])