Skip to main content

Flask extension for opensearch integration

Project description

Flask Opensearch

A minimal flask extension that provides compatibility with the opensearch python client.

Quick Start

First run opensearch in a docker container. If you are working with an AWS Opensearch instance, skip this step.

docker run --name opensearch -p 9200:9200 -p 9600:9600 -e discovery.type=single-node opensearchproject/opensearch:1.0.0

Now in your python code, create a flask application and initialize the extension:

from flask import Flask
from flask_opensearch import FlaskOpenSearch

app = Flask(__name__)

app.config["OPENSEARCH_HOST"] = "localhost"
app.config["OPENSEARCH_USER"] = "admin"
app.config["OPENSEARCH_PASSWORD"] = "admin"

opensearch = FlaskOpenSearch(
    app=app,
    use_ssl=True,
    verify_certs=False,
    ssl_assert_hostname=False,
    ssl_show_warn=False,
)

The keyword parameters to the FlaskOpenSearch constructor other than app are as documented in the opensearch-py documentation.

The opensearch object now behaves like an opensearch-py client. For example, we can create an index, insert a document, and search for it.

# Normally this code would appear in a view function, where an app context is already pushed.
with app.app_context():

    # Check that the client can connect to the opensearch instance.
    connected = opensearch.ping()
    print(connected)  # True

    # Create an index.
    res_1 = opensearch.create_index("test")
    print(res_1)
    # {'acknowledged': True, 'shards_acknowledged': True, 'index': 'test-index'}

    # Insert a document
    res_2 = opensearch.index(
        "test-index",
        body={
            'title': 'Moneyball',
            'director': 'Bennett Miller',
            'year': '2011'
        },
        id="1",
        refresh=True,
    )
    print(res_2)
    # {'_index': 'test-index',
    #     '_type': '_doc',
    #     '_id': '1',
    #     '_version': 1,
    #     'result': 'created',
    #     'forced_refresh': True,
    #     '_shards': {'total': 2, 'successful': 1, 'failed': 0},
    #     '_seq_no': 0,
    #     '_primary_term': 1,
    # }

    # search the index
    res_3 = opensearch.search(
        body={
            "size": 5,
            "query": {
                'multi_match': {
                'query': "miller",
                'fields': ['title^2', 'director']
                }
        }}
    )
    print(res_3)
    # {'took': 156,
    #  'timed_out': False,
    #  '_shards': {'total': 3, 'successful': 3, 'skipped': 0, 'failed': 0},
    #  'hits': {'total': {'value': 1, 'relation': 'eq'},
    #   'max_score': 0.2876821,
    #   'hits': [{'_index': 'test-index',
    #     '_type': '_doc',
    #     '_id': '1',
    #     '_score': 0.2876821,
    #     '_source': {'title': 'Moneyball',
    #      'director': 'Bennett Miller',
    #      'year': '2011'}}]}}

    # delete the document
    res_4 = opensearch.delete(
        index="test-index",
        id="1",
    )
    print(res_4)
    # {'_index': 'test-index',
    #     '_type': '_doc',
    #     '_id': '1',
    #     '_version': 2,
    #     'result': 'deleted',
    #     '_shards': {'total': 2, 'successful': 1, 'failed': 0},
    #     '_seq_no': 1,
    #     '_primary_term': 1}

    # delete the index
    res_5 = opensearch.indices.delete(
        index="test-index",
    )
    print(res_5)  # {'acknowledged': True}

If you are running a local docker environment, you can clean it up with:

docker container stop opensearch
docker container rm opensearch

Development

To set up a development environment, you need to install Docker and Docker-Compose. Please see https://www.docker.com/products/docker-desktop for installation instructions.

Once you have Docker and Docker-Compose installed, you can create a development environment by running the following commands:

# Create a new development environment with Docker-Compose and run the tests
docker compose up --build

If you have already build the docker images and just want to run the tests, you can run the following command:

docker compose exec testenv tox

When you are done developing, you can stop the development environment by running:

docker compose down

Project details


Download files

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

Source Distribution

Flask-Opensearch-1.0.2.tar.gz (4.7 kB view hashes)

Uploaded Source

Built Distribution

Flask_Opensearch-1.0.2-py3-none-any.whl (5.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page