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)