Créé par Baptiste Donaux
Indexer du contenu dans le but de resortir des informations par pertinence selon des cas métiers.
Elasticsearch est un concurrent plus « Monolithique » que SolR.
Pour les libs officielles
Solution pertinente car gestion des requêtes extrêmement simples
$ docker run --rm elasticsearch
Pratique pour développer
$ kibana plugin --install elastic/sense
Fichiers d'exemples disponibles.
GET /
{
"name": "Zero-G",
"cluster_name": "elasticsearch",
"version": {
"number": "2.2.0",
"build_hash": "8ff36d139e16f8720f2947ef62c8167a888992fe",
"build_timestamp": "2016-01-27T13:32:39Z",
"build_snapshot": false,
"lucene_version": "5.4.1"
},
"tagline": "You Know, for Search"
}
PUT /club/member/1
{
"firstname": "John",
"lastname": "Smith"
}
{
"_index": "club",
"_type": "member",
"_id": "1",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
{
"_index": "club",
"_type": "member",
"_id": "1",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
Par défaut les types et les index sont créés automatiquement
action.auto_create_index: false // pour désactiver
GET /club/member/1
{
"_index": "club",
"_type": "member",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"firstname": "John",
"lastname": "Smith"
}
}
DELETE /club/member/1
{
"found": true,
"_index": "club",
"_type": "member",
"_id": "1",
"_version": 2,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
GET /club/member/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"_index": {
"value": "club"
}
}
}
],
"should": [
{
"term": {
"nickname": {
"value": "nickname_to_boost",
"boost": 2
}
}
}
]
}
}
}
Liste des requêtes dans la section Query DSL
Elasticsearch met en cache le résultat des requêtes sur chacun des résultats retournés.
Deux types de requêtes : query et filter.
Les filter sont catégoriques et donc rapides.
Les query sont modérés et influent donc sur le score et la pertinence du résultat.
Les filters sont rapides, il faut donc trier ses filters par ordre d'efficacité pour limiter le stockage des résultats d'un filtre à l'autre.
Indexer des documents unitairement n'est pas efficace. Mieux vaut utiliser des Bulk et indexer des documents en masse.
Définir un mapping comme on veut.
Définir des analyzers/tokenizers selon nos besoins.
On peut indexer une version d'une valeur mais également indexer une valeur sous plusieurs formes.