4.2.3. Elasticsearch

ElasticsearchWriter class can create an index and put documents for each row to Elasticsearch from a matrix of data.

Sample Code
Create an index and put data to Elasticsearch
import datetime
import json

from elasticsearch import Elasticsearch
import pytablewriter as ptw

def main():
    es = Elasticsearch(hosts="localhost:9200")

    writer = ptw.ElasticsearchWriter()
    writer.stream = es
    writer.index_name = "es writer example"
    writer.headers = [
        "str", "byte", "short", "int", "long", "float", "date", "bool", "ip",
    ]
    writer.value_matrix = [
        [
            "abc", 100, 10000, 2000000000, 200000000000, 0.1,
            datetime.datetime(2017, 1, 2, 3, 4, 5), True, "127.0.0.1",
        ],
        [
            "def", -10, -1000, -200000000, -20000000000, 100.1,
            datetime.datetime(2017, 6, 5, 4, 5, 2), False, "::1",
        ],
    ]

    # delete existing index ---
    es.indices.delete(index=writer.index_name, ignore=404)

    # create an index and put data ---
    writer.write_table()

    # display the result ---
    es.indices.refresh(index=writer.index_name)

    print("----- mappings -----")
    response = es.indices.get_mapping(index=writer.index_name, doc_type="table")
    print("{}\n".format(json.dumps(response, indent=4)))

    print("----- documents -----")
    response = es.search(
        index=writer.index_name,
        doc_type="table",
        body={
            "query": {"match_all": {}}
        }
    )
    for hit in response["hits"]["hits"]:
        print(json.dumps(hit["_source"], indent=4))

if __name__ == "__main__":
    main()
Output
----- mappings -----
{
    "es_writer_example": {
        "mappings": {
            "table": {
                "properties": {
                    "bool": {
                        "type": "boolean"
                    },
                    "byte": {
                        "type": "byte"
                    },
                    "date": {
                        "type": "date",
                        "format": "date_optional_time"
                    },
                    "float": {
                        "type": "double"
                    },
                    "int": {
                        "type": "integer"
                    },
                    "ip": {
                        "type": "text"
                    },
                    "long": {
                        "type": "long"
                    },
                    "short": {
                        "type": "short"
                    },
                    "str": {
                        "type": "text"
                    }
                }
            }
        }
    }
}

----- documents -----
{
    "str": "def",
    "byte": -10,
    "short": -1000,
    "int": -200000000,
    "long": -20000000000,
    "float": 100.1,
    "date": "2017-06-05T04:05:02",
    "bool": false,
    "ip": "::1"
}
{
    "str": "abc",
    "byte": 100,
    "short": 10000,
    "int": 2000000000,
    "long": 200000000000,
    "float": 0.1,
    "date": "2017-01-02T03:04:05",
    "bool": true,
    "ip": "127.0.0.1"
}