web-dev-qa-db-fra.com

mappages d'ensembles de clients python elasticsearch lors de la création d'un index

Je peux définir les mappages d'index en cours de création dans la commande curl comme ceci:

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

Mais je dois créer cet index avec le client elasticsearch en python et définir des mappages. Quel est le chemin? J'ai essayé quelque chose ci-dessous mais pas travaillé:

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)
28
user4005632

Vous pouvez simplement ajouter le mappage dans l'appel create comme ceci:

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)
43
Val

Eh bien, il existe un moyen plus simple de faire cela avec la syntaxe générale 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)
21
Elzor

Le client d'API Python peut être difficile à utiliser et vous oblige souvent à fournir les parties internes de la documentation JSON spec aux arguments de mots clés.

Pour la méthode put_mapping, au lieu de lui fournir le document JSON "mappings" complet, vous devez lui attribuer le paramètre document_type et uniquement la partie inner du document "mappings", comme suit:

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"
            }
        }
    }
)
10
James Murty

Un autre exemple de client python expliquant comment augmenter la limite de champs via create index 

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)
0
Pari Rajaram