:Sample Code:
    .. code-block:: python
        :caption: Create an index and put data into 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:
    .. code-block:: none

        ----- 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"
        }
