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')


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow