ElasticSearch
fabrice depaulis

101
#1
Qui ?
Quoi ?
Pourquoi ?
{
"first_name": "Fabrice",
"last_name": "Depaulis",
"company": "Orange",
"departement": "TGI/OLS/SOFT",
"job": "Backend Developper",
"from": [{
"company": "PagesJaunes",
"job": "Data/Search Technical Leader"
},
{
"company": "NeoSoft",
"job": "Backend Developper"
},
{
"company": "SoftTeam",
"job": "Java Developper"
}
]
}?
#2
Mais c'est quoi un moteur ?



-
Beaucoup de données
-
Du web
un outil capable de retrouver une page web à partir de mots clés
Mais aussi
-
Données structurées
-
Recherches métier






Et donc ...
un outil capable de retrouver un document à partir d'informations structurées ou non
Mais
Moteur de recherche
!=
Base de données
- pas de transaction
- pas de roll back
- facettes
- scoring
- etc.
Mais encore ?
-
Indexation
-
Pertinence
-
Recherche FullText
-
Autocomplétion
-
Agrégation et facettes
-
Correction orthographique
Indexation
Image by engin akyurt from Pixabay
Documents
"crêpes" => {farine, œuf, lait}
"génoise" => {oeuf, sucre, farine}
"caramel" => {sucre, beurre}
"flan" => {oeuf, lait, sucre}
-------------------------------------
Index inversé
"farine" => {crêpes, génoise}
"oeuf" => {crêpes, génoise, flan}
"lait" => {crêpes, flan}
"sucre" => {génoise, caramel, flan}
"beurre" => {caramel}
(from wikipedia)search + rapide
insert + lent
volume + grand

Pertinence
Image par planet_fox de Pixabay
TF-IDF
BM25
La pertinence est subjective
- Term Frequency
- Inversed Term Frequency

Critères
Recherche FullText
Le texte est imprécis, ambigü, ...
Homonymes
Double sens
...
SQL
SELECT * FROM movies WHERE description LIKE "%anneaux%" OR description LIKE "%seigneur%"MOTEUR
Analyse des termes selon des règles prédéfinies, et recherche dans l'index inversé
Autocomplétion
- Aide pour de meilleures recherches
- Aide pour de meilleures perfs (suggestion)
- Intérêt business (nouveaux usages)

Agrégation
Classifier les recherches

Correction ortho
Bonne pratique : notifier l'utilisateur de la correction pour ne pas le perdre
S'appuie sur les données du moteur
S'appuie sur des distances
Guide de survie
-
Collecter
-
Designer les documents
-
Mapping
-
Analyse
-
-
Indexer
-
Rechercher
Guide : collecter
- Qu'est-ce que je veux pouvoir rechercher ?
- Quelle type de recherche est-ce que je veux pouvoir faire sur mes documents ?
- Quelle doit être la fraîcheur de la donnée ?
- ...
Guide : document
- Adapter le document au moteur
- La structure de document doit correspondre au besoin de search et d'agrégation
- Champ
- Quel type ?
- Quelle analyse ?
- Quelle sémantique ?
Guide : analyse
- Décider du mapping a priori
- Le moteur analyse les champs et applique des transformations :
- Case insensitive
- Synonymes
- Phonétique
- Pluriels
- ...
Guide : indexation
- Le document est ajouté à l'index
- Le document est stocké
- La plupart des moteurs ont un index inversé : chaque mot (token) référence un document
Guide : search
- Filtrer avant le full text
- Critères
- Combien de termes dans le document ?
- Combien de fois le terme dans le doc ?
- Quelle fréquence d'apparition du terme dans les docs ?
- ...
- Réponse
- Pagination
- Highlight
- Etat de l'index (résultats exhaustifs ou pas)
- Guider l'utilisateur (UI)
- Ne pas cacher les mécanismes utilisés (correction ortho par exemple)
#3
Elastic

"Créateur" : Shay Banon
"Produit" : Compass (2004) puis ElasticSearch (basé sur Lucene)
"Idée" : gérer la monter en charge.
"Elasticsearch" : distribué, json, http
"V04" : 2010
"V1":2014
"2012" : création de l'entreprise ElasticSearch (Amsterdam)
"Levées de fonds" : 10 millions de dollars (2012), 24 millions (2013) et 70 millions (2014)
La société est cotée au NASDAQ depuis le 4 octobre 2018la stack









#4
ElasticSearch
Une lib qui permet d’analyser et de tokeniser, de gérer des index, créer des documents, …
- Première version mars 2000
- Apache en 2001
- Lib Java
- Version 8.4.1 (janvier 2020)
Pb : c’est juste une lib, qui gère mal les env distribués, …
Toutes les évolutions de Lucene impactent ElasticSearch et SolR

Caractéristiques
- Pensé cluster à partir des “erreurs” de Compass
- Schemaless (théroriquement)
- Recherche multi index
- Agregation
- Geoloc
- Java
- openSource
- API RestFul
- Cluster
- Ensemble d’instances ES
- Une instance = un noeud

Versions
0.4.0
2010
1.0.0
2014
2.0.0
2015
5.0.0
2016
6.0.0
2017
7.0.0
2019
7.5.2
2020
- suppression des facets
- suppression des delete by query
- suppression des "." dans les noms de champs
- un nom = un mapping
- disparition du type string
- apparition des types text/keyword
- nécessité de tout réindexer
Cas d'usage






Vocabulaire
Cluster
- Nom unique
- Ensemble de noeuds d’un même réseau
- Elit un unique Master (noeud) qui
- Manage le cluster state
- Décision du routage des données
Noeud
- Process java qui fait partie d’un cluster
- peut être ajouté/retiré d’un cluster
- Communique avec les autres noeuds
- Stocke une partie (ou non) des données (un noeud qui ne stocke pas les données peut être utilisé pour router les requêtes)
- Un noeud ingest peut remplacer la partie “filter” de logstash (ce type de noeud qui execute un pipeline de processing)
Vocabulaire
Index
Espace de stockage des documents
- Définit la structure des doc (mapping)
- Text analyzers
- La stratégie de “splitting” de stockage (sharding)
- Paramètre Lucene
Document
Représente une partie de la donnée métier utile pour le search
Vocabulaire
Shards
- Un shard est une partition de l’index : plusieurs sous ensembles qui ne se recouvrent pas. Un index est donc réparti sur plusieurs noeuds, en fonction du nombre de shards choisis.
- Attention : shard != replicas. Quand on perd un shard, on perd ses données
Replicas
- Copie des données d’un shard sur un autre noeud du cluster
Vocabulaire
Gzip
Package RPM/Deb
Docker
As a service
Installation
- elasticsearch.yml. Options principales :
- path.data
- cluster.name
- node.name
- bootstrap.memory_lock
- Configuration pour un noeud :
- log4j2.properties
- jvm.options
- Pour un noeud
- node.master: true
- node.data: false
- node.ingest: false
- node.ml : true
Configuration
- API REST (port http)
- API Java (port 9300 => port de com binaire Java) => deprecated en 7
Rest API : description
http://host:port/[index]/_doc/[_action|id]
Quelques exemples ? Création d'index et search ? Ou plus tard ?
Communication
Shards et réplicas
# Fonctionnement shards, replicas, ...
Faire un TP où on fait tomber
Peut être à expliquer et faire plus tard ?
Plugins
#5
Indexation
Title Text
shards, réplicas, segments
index : création, maj, suppression, paramètres
Docs : création, maj, suppression, bulks
Id et version des docs
Refresh des index et segments
aliases
mapping
text analysis
#6
Search
Search
Décomposition d'une requête
- search
- multi index
- pagination ?
- tri
- count
- Query String, match, bool query (must, should, ...), ...
Agrégations
A quoi ça sert
Agrégation de base : syntaxe
Décliner toutes les agrégations : term, range, ...
#7
Kibana
ElasticSearch 101
By Fabrice Depaulis
ElasticSearch 101
Introduction à ElasticSearch/Kibana
- 62