with index delete python pyelasticsearch elasticsearch-py

index - python elasticsearch mapping



Python elasticsearch client set mapings durante la creación de índice (4)

Puedo establecer asignaciones de índice que se crean en un comando curl como este:

{ "mappings":{ "logs_june":{ "_timestamp":{ "enabled":"true" }, "properties":{ "logdate":{ "type":"date", "format":"dd/MM/yyy HH:mm:ss" } } } } }

Pero necesito crear ese índice con el cliente de elasticsearch en python y establecer asignaciones ... ¿cuál es el camino? He intentado algunas cosas abajo pero no funciona:

self.elastic_con = Elasticsearch([host], verify_certs=True) self.elastic_con.indices.create(index="accesslog", ignore=400) params = "{/"mappings/":{/"logs_june/":{/"_timestamp/": {/"enabled/": /"true/"},/"properties/":{/"logdate/":{/"type/":/"date/",/"format/":/"dd/MM/yyy HH:mm:ss/"}}}}}" self.elastic_con.indices.put_mapping(index="accesslog",body=params)


Bueno, hay una forma más fácil de hacer esto con la sintaxis general de python:

from elasticsearch import Elasticsearch # conntect es es = Elasticsearch([{''host'': config.elastic_host, ''port'': config.elastic_port}]) # delete index if exists if es.indices.exists(config.elastic_urls_index): es.indices.delete(index=config.elastic_urls_index) # index settings settings = { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "urls": { "properties": { "url": { "type": "string" } } } } } # create index es.indices.create(index=config.elastic_urls_index, ignore=400, body=settings)


El cliente de API de Python puede ser difícil de trabajar y, a menudo, requiere que proporcione las partes internas de la documentación de especificaciones JSON a los argumentos de palabras clave.

Para el método put_mapping , en lugar de proporcionarle el documento JSON completo de "mapeos", debe asignarle el parámetro document_type y solo la parte interna del documento de "mapeos" de la siguiente manera:

self.client.indices.put_mapping( index="accesslog", doc_type="logs_june", body={ "_timestamp": { "enabled":"true" }, "properties": { "logdate": { "type":"date", "format":"dd/MM/yyy HH:mm:ss" } } } )


Otro ejemplo de cliente de Python de cómo aumentar el límite de campo a través de crear índice

from elasticsearch import Elasticsearch es = Elasticsearch([{''host'': config.elastic_host, ''port'': config.elastic_port}]) raiseFieldLimit = '''''' { "index.mapping.total_fields.limit": 2000 }'''''' es.indices.create(index=''myindex'', body=raiseFieldLimit)


Simplemente puede agregar la asignación en la llamada de create esta manera:

from elasticsearch import Elasticsearch self.elastic_con = Elasticsearch([host], verify_certs=True) mapping = '''''' { "mappings":{ "logs_june":{ "_timestamp":{ "enabled":"true" }, "properties":{ "logdate":{ "type":"date", "format":"dd/MM/yyy HH:mm:ss" } } } } }'''''' self.elastic_con.indices.create(index=''test-index'', ignore=400, body=mapping)