Custom Analyzers

Description

L’évaluation de la pertinence dans Elasticsearch est rendue possible en partie par les analyseurs de texte. Elasticsearch est livré avec de nombreux analyseurs parmi lesquels vous pouvez choisir, mais il est également très facile de combiner des tokenizers, des filtres de token et des filtres de caractères pour créer votre propre analyseur afin de répondre à vos besoins spécifiques en matière d’analyse de texte. En utilisant ou en créant le meilleur analyseur pour vous, vous pouvez améliorer considérablement les résultats de recherche dans Elasticsearch. Dans ce laboratoire pratique, vous avez l’occasion de faire les exercices suivants :

  • Créer un analyseur personnalisé basé sur l’analyseur “standard”.
  • Créer un nouveau mappage de champ analysé avec l’analyseur personnalisé
  • Réindexer des documents avec le nouvel analyseur pour comparer le comportement de recherche.

Vous travaillez en tant qu’administrateur Elasticsearch et gérez un cluster Elasticsearch à 6 nœuds qui est utilisé pour la recherche littéraire. Les bibliothécaires de recherche qui utilisent actuellement votre cluster, pour étudier les œuvres de Shakespeare, ont demandé l’ajout d’un nouveau comportement de recherche. Actuellement, l’entrée textuelle multi-champs est indexée à la fois comme un champ de mots-clés non analysé et comme un champ de texte analysé à l’aide de l’analyseur standard. Ils demandent l’ajout d’un autre champ text_entry appelé text_entry.case_insensitive qui est également un champ de texte analysé, mais analysé avec un analyseur personnalisé appelé standard_custom qui se comporte exactement comme l’analyseur standard mais ne met pas les mots résultants en minuscules. Par exemple, la ligne “Death, death ; O amiable lovely death !” est analysée par l’analyseur standard comme [death, death, o, amiable, lovely, death] mais devrait être analysée par l’analyseur personnalisé comme [Death, death, O, amiable, lovely, death].

Le nouveau mappage de champ et l’analyseur personnalisé doivent être créés sur un nouvel index appelé shakespeare_new qui doit ressembler exactement à l’index shakespeare. Une fois que l’index a été créé avec les exigences expliquées ci-dessus, vous devrez réindexer les documents de l’index shakespeare dans l’index shakespeare_new.

curl -O https://raw.githubusercontent.com/linuxacademy/content-elastic-certification/master/sample_data/shakespeare.json
POST shakespeare/_bulk
{
    data
}
PUT shakespeare_new
{
  "mappings": {
    "properties": {
      "line_id": {
        "type": "integer"
      },
      "line_number": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "play_name": {
        "type": "keyword"
      },
      "speaker": {
        "type": "keyword"
      },
      "speech_number": {
        "type": "integer"
      },
      "text_entry": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "case_insensitive": {
            "type": "text",
            "analyzer": "standard_custom"
          }
        }
      },
      "type": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_custom": {
          "type": "custom",
          "tokenizer": "standard"
        }
      }
    },
    "number_of_shards": 4,
    "number_of_replicas": 3
  }
}
POST _reindex
{
  "source": {
    "index": "shakespeare"
  },
  "dest": {
    "index": "shakespeare_new"
  }
}