Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 30 min Python

Python avec Elasticsearch : guide pratique

Pourquoi Python avec Elasticsearch : guide pratique ?

Python est un langage polyvalent apprécié pour sa simplicité et sa puissance. L'intégration de Python avec Elasticsearch, une plateforme de recherche en temps réel, offre des avantages significatifs :

  • Efficacité : Elasticsearch est conçu pour traiter des milliards de documents en secondes.
  • Facilité d'utilisation : La bibliothèque elasticsearch-py simplifie l'interaction avec Elasticsearch.
  • Flexibilité : Python permet une grande flexibilité dans le développement, ce qui facilite la création de solutions personnalisées.

Un cas d'usage concret serait la gestion d'une application de blog. Nous souhaitons stocker et récupérer des articles en temps réel, tout en facilitant les recherches et les filtres.

Prerequis

Concepts fondamentaux

1. Installation et configuration d'Elasticsearch

Commencez par installer Elasticsearch :

## Téléchargez et installez Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.10.0-linux-x86_64.tar.gz
cd elasticsearch-7.10.0

## Lancez Elasticsearch
./bin/elasticsearch

2. Installation de la bibliothèque elasticsearch-py

Installez la bibliothèque Python pour interagir avec Elasticsearch :

pip install elasticsearch

3. Connexion à Elasticsearch

Voici comment vous pouvez vous connecter à votre instance d'Elasticsearch :

from elasticsearch import Elasticsearch

## Configurer le client Elasticsearch
es = Elasticsearch("http://localhost:9200")

## Vérifier la connexion
if es.ping():
    print("Connected to Elasticsearch")
else:
    print("Could not connect to Elasticsearch")

4. Indexation de documents

Indexer des documents dans Elasticsearch est simple :

from elasticsearch import Elasticsearch

## Connexion au client Elasticsearch
es = Elasticsearch("http://localhost:9200")

## Document à indexer
doc = {
    "title": "Python avec Elasticsearch : guide pratique",
    "content": "Ce tutoriel vous apprendra comment utiliser Python pour travailler avec Elasticsearch."
}

## Indexation du document
res = es.index(index="blog", id=1, body=doc)
print(res['result'])

5. Recherche de documents

Rechercher des documents dans Elasticsearch est également facile :

from elasticsearch import Elasticsearch

## Connexion au client Elasticsearch
es = Elasticsearch("http://localhost:9200")

## Requête de recherche
query = {
    "match": {
        "content": "Python avec Elasticsearch"
    }
}

## Exécution de la requête
res = es.search(index="blog", body=query)
print("Found %d documents" % res['hits']['total']['value'])
for hit in res['hits']['hits']:
    print(hit["_source"])

6. Mise à jour et suppression de documents

Mettre à jour et supprimer des documents est également simple :

from elasticsearch import Elasticsearch

## Connexion au client Elasticsearch
es = Elasticsearch("http://localhost:9200")

## Mise à jour d'un document
update_res = es.update(index="blog", id=1, body={"doc": {"content": "Python avec Elasticsearch : guide pratique amélioré."}})
print(update_res['result'])

## Suppression d'un document
delete_res = es.delete(index="blog", id=1)
print(delete_res['result'])

Mise en pratique : projet fil rouge

Étape 1 : Création du projet et configuration de l'environnement

Créez un nouveau répertoire pour votre projet :

mkdir blog-app
cd blog-app
pipenv install elasticsearch flask

Structure des fichiers initiale :

blog-app/
├── app.py
├── requirements.txt
└── README.md

Étape 2 : Création d'un serveur Flask

Créez un fichier app.py pour votre application Flask :

from flask import Flask, request, jsonify
from elasticsearch import Elasticsearch

app = Flask(__name__)
es = Elasticsearch("http://localhost:9200")

@app.route('/posts', methods=['POST'])
def create_post():
    data = request.get_json()
    res = es.index(index="blog", body=data)
    return jsonify(res), 201

@app.route('/posts/<int:id>', methods=['GET'])
def get_post(id):
    res = es.get(index="blog", id=id)
    return jsonify(res['_source'])

@app.route('/posts', methods=['GET'])
def search_posts():
    query = request.args.get('query')
    body = {
        "match": {
            "content": query
        }
    }
    res = es.search(index="blog", body=body)
    return jsonify([hit['_source'] for hit in res['hits']['hits']])

if __name__ == '__main__':
    app.run(debug=True)

Étape 3 : Indexation de documents

Ajoutez quelques documents dans Elasticsearch :

from elasticsearch import Elasticsearch

es = Elasticsearch("http://localhost:9200")

## Ajout d'un document
doc1 = {
    "title": "Python avec Elasticsearch : guide pratique",
    "content": "Ce tutoriel vous apprendra comment utiliser Python pour travailler avec Elasticsearch."
}
res = es.index(index="blog", id=1, body=doc1)
print(res['result'])

## Ajout d'un autre document
doc2 = {
    "title": "Introduction à Flask",
    "content": "Flask est un framework web Python simple et efficace."
}
res = es.index(index="blog", id=2, body=doc2)
print(res['result'])

Étape 4 : Exécution de l'application

Lancez votre application Flask :

pipenv run python app.py

Vous pouvez maintenant tester vos endpoints à travers une interface web ou des outils comme Postman.

Erreurs fréquentes et debugging

1. Connection refused

Le message d'erreur serait : elasticsearch.exceptions.ConnectionError: Connection refused.

## ❌ Mauvais
es = Elasticsearch("http://localhost:9200")

## ✅ Correct
es = Elasticsearch("http://localhost:9200", timeout=30)

2. JSONDecodeError

Le message d'erreur serait : elasticsearch.exceptions.JSONDecodeError.

## ❌ Mauvais
res = es.search(index="blog", body={"match": {"content": "Python avec Elasticsearch"}})

## ✅ Correct
from elasticsearch_dsl import Search

s = Search(using=es, index="blog")
q = s.query("match", content="Python avec Elasticsearch")
res = q.execute()

3. ElasticsearchError

Le message d'erreur serait : elasticsearch.exceptions.ElasticsearchError.

## ❌ Mauvais
doc = {"title": "Nouveau document"}
es.index(index="blog", id=1, body=doc)

## ✅ Correct
try:
    es.index(index="blog", id=1, body=doc)
except Exception as e:
    print(f"Error: {e}")

Pour aller plus loin

1. Utiliser Elasticsearch avec Docker

Utilisez Docker pour simplifier le déploiement et la gestion d'Elasticsearch :

2. Optimiser les performances de recherche

Apprenez à optimiser vos requêtes de recherche pour améliorer les performances :

3. Utiliser Elasticsearch pour l'analyse de données

Intégrez Elasticsearch avec d'autres outils comme Kibana et Logstash pour une analyse de données complète :

Défi pratique : Créer un CLI tool pour gérer les articles du blog

Développez un simple CLI tool qui permet de créer, lire, mettre à jour et supprimer des articles. Utilisez argparse pour la gestion des commandes :

import argparse
from elasticsearch import Elasticsearch

es = Elasticsearch("http://localhost:9200")

def create_post(title, content):
    doc = {
        "title": title,
        "content": content
    }
    res = es.index(index="blog", body=doc)
    print(f"Document créé avec ID {res['_id']}")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Gestion de blog via CLI')
    subparsers = parser.add_subparsers(dest='command')

    create_parser = subparsers.add_parser('create', help='Créer un article')
    create_parser.add_argument('title', type=str, help='Titre de l'article')
    create_parser.add_argument('content', type=str, help='Contenu de l'article')

    args = parser.parse_args()

    if args.command == 'create':
        create_post(args.title, args.content)

Ce CLI tool permettra d'ajouter des articles simplement via la ligne de commande.

Besoin d'aide sur Python ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer Elasticsearch sur mon ordinateur local ?
Pour installer Elasticsearch sur votre ordinateur local, vous devez d'abord télécharger la version appropriée depuis le site officiel d'Elasticsearch. Ensuite, décompressez le fichier téléchargé et exécutez le script `bin/elasticsearch` pour démarrer le service.
Quelle est la différence entre Elasticsearch et une base de données SQL ?
Elasticsearch est un moteur de recherche et d'analyse distribué, tandis qu'une base de données SQL (structured query language) est conçue pour stocker et manipuler des données structurées. Elasticsearch excelle dans la recherche et l'analyse de grandes quantités de données non structurées, tandis que les bases de données SQL sont plus adaptées aux requêtes complexes sur des données relationnelles.
Comment indexer des documents dans Elasticsearch ?
Pour indexer un document dans Elasticsearch, vous devez utiliser l'API RESTful. En envoyant une requête POST à l'URL de votre cluster Elasticsearch avec le chemin approprié pour spécifier l'index et le type (si applicable), vous pouvez ajouter ou mettre à jour les documents.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.