Solución:
Simplemente puede agregar el mapeo en el create
llamar así:
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)
Bueno, hay una manera 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 la API de Python puede ser complicado de trabajar y, a menudo, requiere que proporciones las partes internas de la documentación de especificaciones JSON a los argumentos de palabras clave.
Para el put_mapping
, en lugar de proporcionarle el documento JSON de “asignaciones” completo, debe proporcionarle el document_type
parámetro y solo el interno parte del documento “mapeos” así:
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"
}
}
}
)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)