Quick Start with Elasticsearch on AWS

Libraries

You need elasticsearch (not AWS specific) and requests-aws4auth so that requests python library can use AWS authentication (interesting approach!).

Initialise

from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

awsauth = AWS4Auth(key, secret, region, "es")

es = Elasticsearch(
    [{"host": endpoint, "port": 443}],
    http_auth=awsauth,
    use_ssl=True,
    verify_certs=True,
    connection_class=RequestsHttpConnection)

es.info()

should print something like

{'name': '...',
 'cluster_name': '...',
 'cluster_uuid': '...',
 'version': {'number': '7.4.2',
  'build_flavor': 'oss',
  'build_type': 'tar',
  'build_hash': 'unknown',
  'build_date': '...',
  'build_snapshot': False,
  'lucene_version': '8.2.0',
  'minimum_wire_compatibility_version': '6.8.0',
  'minimum_index_compatibility_version': '6.0.0-beta1'},
 'tagline': 'You Know, for Search'}

Listing All Indices

# list all indices
es.indices.get_alias("*")

# or all indices keys
es.indices.get_alias().keys()

Get Specific Document

es.get(index="...", id="...")

Get Everything in an Index

r = es.search(index="...", body={"query": { "match_all": {}}}, size=10000)

Not the size arg - has to be large enough. It’s not pretty so don’t use in prod.

Add to Index

es.index("index_name", id="desired doc id", body={"test1": "1", "test2": "2"})

body is the actual document body to be indexed.

Have a question⁉ Contact me.