Définir le mapping

Description

Les modèles dynamiques dans Elasticsearch permettent d’indexer très facilement les données sans avoir à créer des mappages explicites pour chaque champ. Cependant, il peut arriver que vous préfériez créer des mappages explicites, ou même désactiver complètement le mappage dynamique, afin d’avoir un contrôle plus étroit de la structure de votre index et des exigences en matière de type de données. Dans cette activité d’apprentissage, vous avez l’occasion de créer des mappages de champ explicites pour un index contenant des données de journal. Plus précisément, vous allez vous exercer à

  • Créer des champs de chaîne de caractères analysés avec un analyseur spécifique.
  • Créer des champs de chaîne de caractères non analysés avec des limites de caractères
  • Créer des mappages de champs geo_point
  • Créer des mappages de champs numériques
  • Créer des mappages de champs de date
  • Créer des mappages de champs IP
  • Créer des mappages de champs d’imbrication (objets)
  • Réindexer des données d’un index dans un autre avec des mappings différents.

Vous travaillez en tant qu’administrateur Elasticsearch pour un cluster à 6 nœuds et vous êtes chargé de corriger certains mappages de champs pour un index contenant des données de journal. Les données de journal actuelles ont été ingérées sans aucune préparation et la plupart des champs créés ne sont pas du type souhaité. L’index logs existant devra être réindexé dans un nouvel index appelé logs_new. Vous êtes chargé de créer l’index logs_new avec les exigences de mappage suivantes :

FieldDatatypeCharacter LimitAnalyzer
@messagetextstandard
@tagskeyword128
@timestampdate
@versionkeyword256
agenttextstandard
agent.keywordkeyword256
byteslong
clientipip
extensionkeyword256
geo.coordinatesgeo_point
geo.destkeyword128
geo.srckeyword128
geo.srcdestkeyword128
headingskeyword256
hostkeyword256
ipip
linkskeyword256
machine.oskeyword256
machine.ramlong
memorylong
phpmemorylong
refererkeyword256
relatedContent.article:modified_timedate
relatedContent.article:published_timedate
relatedContent.article:sectionkeyword128
relatedContent.article:tagkeyword128
relatedContent.og:descriptiontextstandard
relatedContent.og:imagekeyword256
relatedContent.og:image:heightlong
relatedContent.og:image:heightlong
relatedContent.og:site_namekeyword256
relatedContent.og:titletextstandard
relatedContent.og:title.keywordkeyword256
relatedContent.og:typekeyword128
relatedContent.og:urltextsimple
relatedContent.og:url.keywordkeyword256
relatedContent.twitter:cardkeyword128
relatedContent.twitter:descriptiontextstandard
relatedContent.twitter:imagekeyword256
relatedContent.twitter:sitekeyword128
relatedContent.twitter:titletextstandard
relatedContent.twitter:title.keywordkeyword128
relatedContent.twitter:title.keywordkeyword128
relatedContent.url.keywordkeyword256
requesttextsimple
request.keywordkeyword256
responsekeyword128
responsekeyword128
spacestextwhitespace
urltextsimple
url.keywordkeyword256
utc_timedate
xsstextstandard
xss.keywordkeyword512

L’index logs_new doit conserver les mêmes paramètres d’index que l’index logs pour le nombre de shards primaires et de replica. Une fois que l’index logs_new a été créé, vous pouvez réindexer les documents dans le nouvel index.

curl -O https://raw.githubusercontent.com/linuxacademy/content-elastic-certification/master/sample_data/logs.json
POST logs/_bulk
{
    data
}
PUT logs_new
{
  "mappings": {
    "properties": {
      "@message": {
        "type": "text"
      },
      "@tags": {
        "type": "keyword",
        "ignore_above": 128
      },
      "@timestamp": {
        "type": "date"
      },
      "@version": {
        "type": "keyword",
        "ignore_above": 256
      },
      "agent": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "bytes": {
        "type": "long"
      },
      "clientip": {
        "type": "ip"
      },
      "extension": {
        "type": "keyword",
        "ignore_above": 256
      },
      "geo": {
        "properties": {
          "coordinates": {
            "type": "geo_point"
          },
          "dest": {
            "type": "keyword",
            "ignore_above": 128
          },
          "src": {
            "type": "keyword",
            "ignore_above": 128
          },
          "srcdest": {
            "type": "keyword",
            "ignore_above": 128
          }
        }
      },
      "headings": {
        "type": "keyword",
        "ignore_above": 256
      },
      "host": {
        "type": "keyword",
        "ignore_above": 256
      },
      "ip": {
        "type": "ip"
      },
      "links": {
        "type": "keyword",
        "ignore_above": 256
      },
      "machine": {
        "properties": {
          "os": {
            "type": "keyword",
            "ignore_above": 256
          },
          "ram": {
            "type": "long"
          }
        }
      },
      "memory": {
        "type": "long"
      },
      "phpmemory": {
        "type": "long"
      },
      "referer": {
        "type": "keyword",
        "ignore_above": 256
      },
      "relatedContent": {
        "properties": {
          "article:modified_time": {
            "type": "date"
          },
          "article:published_time": {
            "type": "date"
          },
          "article:section": {
            "type": "keyword",
            "ignore_above": 128
          },
          "article:tag": {
            "type": "keyword",
            "ignore_above": 128
          },
          "og:description": {
            "type": "text"
          },
          "og:image": {
            "type": "keyword",
            "ignore_above": 256
          },
          "og:image:height": {
            "type": "long"
          },
          "og:image:width": {
            "type": "long"
          },
          "og:site_name": {
            "type": "keyword",
            "ignore_above": 256
          },
          "og:title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "og:type": {
            "type": "keyword",
            "ignore_above": 128
          },
          "og:url": {
            "type": "text",
            "analyzer": "simple",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "twitter:card": {
            "type": "keyword",
            "ignore_above": 128
          },
          "twitter:description": {
            "type": "text"
          },
          "twitter:image": {
            "type": "keyword",
            "ignore_above": 256
          },
          "twitter:site": {
            "type": "keyword",
            "ignore_above": 128
          },
          "twitter:title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 128
              }
            }
          },
          "url": {
            "type": "text",
            "analyzer": "simple",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      },
      "request": {
        "type": "text",
        "analyzer": "simple",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "response": {
        "type": "keyword",
        "ignore_above": 128
      },
      "spaces": {
        "type": "text",
        "analyzer": "whitespace"
      },
      "url": {
        "type": "text",
        "analyzer": "simple",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "utc_time": {
        "type": "date"
      },
      "xss": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 512
          }
        }
      }
    }
  },
  "settings": {
    "number_of_shards": 4,
    "number_of_replicas": 3
  }
}
POST _reindex
{
  "source": {
    "index": "logs"
  },
  "dest": {
    "index": "logs_new"
  }
}