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 2018

la 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