TP : Définir et exécuter des agrégations dans Elasticsearch

Description

L’API de recherche d’Elasticsearch est un outil très puissant qui permet d’extraire exactement ce que vous cherchez à partir de grandes quantités de données. Cependant, si vous utilisez Elasticsearch comme moteur de recherche dorsal pour une application ou un site Web, vous ne pouvez pas attendre de vos utilisateurs qu’ils sachent comment élaborer des requêtes de recherche dans Elasticsearch. Les modèles de recherche permettent à un développeur de créer une recherche complexe et d’abstraire tous les termes de recherche en paramètres. Ensuite, tout ce que le développeur doit faire est de demander les paramètres à l’utilisateur et d’exécuter la requête de recherche modélisée avec les valeurs fournies par l’utilisateur. Dans ce laboratoire pratique, vous ferez les exercices suivants :

  • Créer un modèle de recherche et abstraire divers termes de recherche.
  • Exécuter une recherche en utilisant un modèle de recherche enregistré

Vous travaillez en tant qu’administrateur d’Elasticsearch et avez été engagé en tant que consultant pour utiliser Elasticsearch en tant qu’appliance de recherche backend pour un site Web qui fournit des analyses littéraires sur les œuvres de Shakespeare. Votre client souhaite que vous implémentiez un modèle de recherche dans Elasticsearch afin qu’il puisse transmettre les entrées fournies par l’utilisateur à partir du site Web dans une requête de recherche Elasticsearch. Les exigences fonctionnelles pour le modèle de recherche sont les suivantes :

  • Le champ text_entry doit effectuer une recherche sur un paramètre “text”.
  • La page actuelle des résultats doit être abstraite avec un paramètre “page” dont la valeur par défaut est “0”.
  • Le nombre de résultats par page doit être extrait à l’aide d’un paramètre “size” dont la valeur par défaut est “25”.

Préparation

PUT /shakespeare
{
 "mappings": {
   "properties": {
    "speaker": {"type": "keyword"},
    "play_name": {"type": "keyword"},
    "line_id": {"type": "integer"},
    "speech_number": {"type": "integer"}
   }
 }
}


curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/doc/_bulk?pretty' --data-binary @shakespeare_6.0.json


GET _cat/nodes?v

GET _cat/indices?v

Créez et stockez le modèle de recherche selon les instructions

POST _scripts/shakespeare_text_search
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "text_entry": "{{text}}"
        }
      },
      "from": "{{ page }}{{^page}}0{{/page}}",
      "size": "{{ size }}{{^size}}25{{/size}}"
    }
  }
}

Exécuter une recherche sur le modèle de recherche

GET _search/template
{
  "id": "shakespeare_text_search",
  "params": {
    "text": "love",
    "page": 5,
    "size": 100
  }
}