Elasticsearch
Interface Python
Recherche…
Paramètres
| Paramètre | Détails |
|---|---|
| les hôtes | Tableau d'hôtes sous la forme d'objet contenant des clés host et port . L' host par défaut est 'localhost' et le port est 9200. Un exemple d'entrée ressemble à [{"host": "ip of es server", "port": 9200}] |
| sniff_on_start | Booléen si vous souhaitez que le client sniffe les nœuds au démarrage, renifler signifie obtenir la liste des nœuds dans le cluster elasticsearch |
| sniff_on_connection_fail | Booléen pour déclencher le reniflage si la connexion échoue lorsque le client est actif |
| sniffer_timeout | différence de temps en secondes entre chaque reniflement |
| sniff_timeout | temps pour une seule demande de reniflage en quelques secondes |
| retry_on_timeout | Booelan pour si le client devrait temporiser le déclencheur en contactant un autre nœud elasticsearch ou simplement pour lancer une erreur |
| http_auth | Une authentification http de base peut être fournie ici sous la forme d'un username:password d' username:password |
Indexer un document (c.-à-d. Ajouter un échantillon)
Installez la bibliothèque Python nécessaire via:
$ pip install elasticsearch
Connectez-vous à Elasticsearch, Créer un document (par exemple, saisie de données) et "Indexer" le document à l'aide d'Elasticsearch.
from datetime import datetime
from elasticsearch import Elasticsearch
# Connect to Elasticsearch using default options (localhost:9200)
es = Elasticsearch()
# Define a simple Dictionary object that we'll index to make a document in ES
doc = {
'author': 'kimchy',
'text': 'Elasticsearch: cool. bonsai cool.',
'timestamp': datetime.now(),
}
# Write a document
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)
print(res['created'])
# Fetch the document
res = es.get(index="test-index", doc_type='tweet', id=1)
print(res['_source'])
# Refresh the specified index (or indices) to guarantee that the document
# is searchable (avoid race conditions with near realtime search)
es.indices.refresh(index="test-index")
# Search for the document
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
# Show each "hit" or search response (max of 10 by default)
for hit in res['hits']['hits']:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
Connexion à un cluster
es = Elasticsearch(hosts=hosts, sniff_on_start=True, sniff_on_connection_fail=True, sniffer_timeout=60, sniff_timeout=10, retry_on_timeout=True)
Créer un index vide et définir le mappage
Dans cet exemple, nous créons un index vide (nous n'y indexons aucun document) en définissant son mappage.
Tout d'abord, nous créons une instance ElasticSearch et nous définissons ensuite le mappage de notre choix. Ensuite, nous vérifions si l'index existe et si ce n'est pas le cas, nous le créons en spécifiant les paramètres d' index et de body qui contiennent respectivement le nom d'index et le corps du mappage.
from elasticsearch import Elasticsearch
# create an ElasticSearch instance
es = Elasticsearch()
# name the index
index_name = "my_index"
# define the mapping
mapping = {
"mappings": {
"my_type": {
"properties": {
"foo": {'type': 'text'},
"bar": {'type': 'keyword'}
}
}
}
}
# create an empty index with the defined mapping - no documents added
if not es.indices.exists(index_name):
res = es.indices.create(
index=index_name,
body=mapping
)
# check the response of the request
print(res)
# check the result of the mapping on the index
print(es.indices.get_mapping(index_name))
Mise à jour partielle et mise à jour par requête
Mise à jour partielle: Utilisée lorsqu'une mise à jour partielle du document est nécessaire, c'est-à-dire que dans l'exemple suivant, le name du champ avec l'ID doc_id va être mis à jour en "John". Notez que si le champ est manquant, il sera simplement ajouté au document.
doc = {
"doc": {
"name": "John"
}
}
es.update(index='index_name',
doc_type='doc_name',
id='doc_id',
body=doc)
Mise à jour par requête: utilisée lorsque nécessaire pour mettre à jour des documents satisfaisant à une condition, c'est-à-dire que dans l'exemple suivant, nous mettons à jour l'âge des documents dont le champ de name correspond à «John».
q = {
"script": {
"inline": "ctx._source.age=23",
"lang": "painless"
},
"query": {
"match": {
"name": "John"
}
}
}
es.update_by_query(body=q,
doc_type='doc_name',
index='index_name')