[C'est ma participation11Le défi du mois de juin18Oh, mon Dieu.,Voir les détails de l'événement:2021Un dernier défi]
Un.、Qu'est - ce qu'une cartographie(Mapping)
Par 【Elasticsearch7——Index、type、Documents et champs】 Une section montre,ElasticsearchOù les données sont stockées sous forme de document,Les requêtes peuvent être faites par index après traitement.Et la cartographie(mapping)C'est primitif.JSONConvertisseur vers le document;Détermine également comment l'index est associé au document
.
Comme suit:
Chaque document est une collection de champs, Chaque champ a son propre Type de données. Une carte peut être définie lors de la cartographie des données , Contient une liste des champs associés au document . La définition de la cartographie comprend également des champs de métadonnées ,Par exemple_source
Les champs définissent la façon de traiter les Métadonnées
.
Empêcher les champs d'augmenter indéfiniment
Si une cartographie dynamique est utilisée , Chaque nouveau document inséré peut introduire de nouveaux champs . Définir trop de champs dans l'index peut entraîner Cartographier l'explosion
,Et doncMémoire insuffisante
Des erreurs et Difficile à récupérer
Situation.Utiliser Configuration des limites de cartographie
Pour limiter le nombre de cartes de champ ( Création manuelle ou dynamique ) Et empêcher l'explosion de la cartographie .
index.mapping.total_fields.limit
: Limite le nombre maximum de champs dans l'index ;Champ
、Cartographie des objets
EtAlias du champ
Compte tenu de cette limite ,La valeur par défaut est1000
. Le but de cette restriction est d'éviter que la cartographie et la recherche ne deviennent trop grandes . Des valeurs plus élevées peuvent entraîner une dégradation des performances et des problèmes de mémoire , En particulier dans les grappes à forte charge ou à faibles ressources .index.mapping.depth.limit
: Représente la profondeur de la cartographie .Par exemple, Si tous les champs sont définis au niveau de l'objet racine ,Alors la profondeur est1
. S'il y a une cartographie d'objet ,Alors la profondeur est2
Attendez..Par défaut20
.index.mapping.nested_fields.limit
:DéfininestedIndex
Nombre maximum de cartes différentes dans ,nested
Les types ne doivent être utilisés que lorsqu'il est nécessaire d'interroger les tableaux d'objets indépendamment les uns des autres ;Par défaut50.index.mapping.nested_objects.limit
: La nidification qu'un seul document peut contenir JSON Objet(nested
Type)Nombre maximum de,Par défaut10000
.index.mapping.field_name_length.limit
: Définir la longueur maximale du nom du champ ,Par défautLong.MAX_VALUE
(Illimité).index.mapping.dimension_fields.limit
:Uniquement Elastic Pour usage interne,Dimensions maximales des séries chronologiques de l'index;Par défaut16
.
dynamic Paramètres
dynamic
Les paramètres contrôlent si de nouveaux champs sont ajoutés dynamiquement , Les valeurs sont les suivantes :
Valeur | |
---|---|
true | Nouveau champ ajouté à la carte (Par défaut) |
runtime | Nouveau champ comme Champ d'exécution Ajouter à la carte , Ces champs ne sont pas indexés ,Et_source Charger lors de la requête |
false | Le nouveau champ sera Ignorer , Ces champs ne sont ni indexés ni consultables |
strict | Si un nouveau champ est détecté ,Oui. Lance une exception et rejette Documentation, Le nouveau champ doit être explicitement ajouté à la carte |
La recherche se déroule en deux étapes : Recherche en entrant lors de la recherche 、 Recherche en entrant dans l'index , Creusez un trou ici pour l'instant [todo].Et Champ d'exécution
Oui.Lors de la requête
Champs calculés ,C'est bon.:
- Ajouter des champs au document existant sans ré - indexer les données
- Commencer le traitement des données sans connaître la structure des données
- écraser la valeur retournée du champ index lors de la requête
- Définir des champs à des fins spécifiques sans modifier l'architecture sous - jacente
Les avantages
- Parce que le champ d'exécution n'est pas indexé , Par conséquent, l'ajout d'un champ d'exécution n'augmente pas la taille de l'index ;
- Si vous définissez le champ d'exécution comme un champ index , Il n'est pas nécessaire de modifier une requête qui fait référence à un champ d'exécution ;
- Simplification de la prise de décision en matière de cartographie , Il n'est pas nécessaire de décider à l'avance comment analyser les données ;
- Utiliser la recherche asynchrone API Lancer une recherche contenant des champs d'exécution . Cette méthode de recherche aide à compenser l'impact sur le rendement des valeurs calculées pour les champs d'exécution dans chaque document qui contient ce champ .
Utiliser Champ d'exécution
Pas besoin de Index
Le schéma peut être modifié ,Peut être utilisé en combinaison Champ d'exécution
EtChamp Index
Pour équilibrer l'utilisation des ressources et le rendement . Cela rend l'index plus petit , Recherche plus lente .
2.、Cartographie dynamique
Cartographie dynamique
Allow Elasticsearch Ajouter dynamiquement d'autres champs , Il suffit d'indexer le document .Elasticsearch Une des caractéristiques les plus importantes est Accord
, Les documents indexés peuvent être ajoutés directement , Pas besoin de créer un index 、Définir le type de carte et définir les champs.
La détection automatique et l'ajout de nouveaux champs sont appelés Cartographie dynamique, Vous pouvez également personnaliser les règles de cartographie dynamique :
- Cartographie dynamique des champs : Gérer les règles pour détecter les champs dynamiques
- Modèles dynamiques: Configurer les règles de cartographie personnalisées pour les champs ajoutés dynamiquement ; Les modèles d'index peuvent configurer la cartographie par défaut pour les nouveaux index 、 Paramètres et alias , Qu'il s'agisse d'une création automatique ou explicite .
Disponible dans la documentation et object Niveau désactiver la cartographie dynamique ,Oui.dynamicParamètre défini à false Ignorer le nouveau champ ,Set tostrictIl sera là. Elasticsearch Rejeter le document lorsqu'un champ inconnu est rencontré .
Cartographie dynamique des champs
Quand Elasticsearch Lorsqu'un nouveau champ est détecté dans le document , Il ajoute dynamiquement ce champ à la carte de type par défaut ;Peut passerdynamic Paramètres
Contrôler ce comportement .
Activer la cartographie dynamique :
- Quand
dynamic=true
Heure, Recherche en entrant dans l'index - Quand
dynamic=runtime
Heure, Recherche en entrant lors de la recherche
dynamic Les paramètres affectent JSONAnalyse des données, Le type de données par défaut est résolu comme suit :
jsonDonnées | dynamic=true |
dynamic=runtime |
---|---|---|
null | Ne pas ajouter | Ne pas ajouter |
true Ou false | boolean | boolean |
double | float | double |
integer | long | long |
object | object | Ne pas ajouter de champs |
array | Dépend du premier non dans le tableau nullValeur | Dépend du premier non dans le tableau nullValeur |
string【 Test de date de réussite 】 | date | date |
string【 Test numérique réussi | float Ou long |
double Ou long |
string【 Échec du test de date ou de valeur 】 | text Avec.keyword Sous - Champs |
keyword |
date_detection( Date de détection )
Sidate_detection- Oui.enabled(Par défaut), Vérifiez le nouveau champ de chaîne pour voir si son contenu est compatible avec Tous les modèles de date spécifiés dans dynamic_date_formats.Si une correspondance est trouvée,date Un nouveau champ avec le format approprié est ajouté .
dynamic_date_formatsLa valeur par défaut pour est:
yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
yyyy-MM-dd
yyyy/MM/dd HH:mm:ss Z
yyyy/MM/dd Z
Désactiver la détection de date :
PUT my-index-000001
{
"mappings": {
"date_detection": false
}
}
Copier le Code
Détection de date personnalisée :
PUT my-index-000001
{
"mappings": {
"dynamic_date_formats": ["MM/dd/yyyy"]
}
}
PUT my-index-000001/_doc/1
{
"create_date": "09/25/2015"
}
Copier le Code
Détection numérique (numeric_detection):
PUT my-index-000001
{
"mappings": {
"numeric_detection": true
}
}
PUT my-index-000001/_doc/1
{
"my_float": "1.0",
"my_integer": "1"
}
Copier le Code
Modèle de cartographie dynamique
Sauf que Règles de cartographie dynamique des champs par défaut
Au - delà,Oui.dynamic
Set totrue
Ouruntime
,Et vous pouvez passerModèles dynamiques
Règles de cartographie personnalisées . Les modèles dynamiques peuvent être réorganisés ou supprimés après leur ajout ,Les règles de correspondance sont les suivantes:
- match_mapping_type: Validation par type , Prise en charge du type de données par défaut
- match/unmatch: Correspondance des motifs par nom de champ
- path_match/path_unmatch: Pattern Matching by Property Access path
Non défini
Lorsque les règles ci - dessus correspondent , Ne correspond à aucun champ
Valider la cartographie
Si la carte fournie contient un fragment de carte invalide , Erreur de validation retournée . Validation lors de l'application d'un modèle dynamique indexé , Et dans la plupart des cas, , Validation lors de la mise à jour du modèle dynamique .Dans certains cas, La fourniture d'un fragment de carte invalide peut entraîner l'échec de la mise à jour ou de la validation du modèle dynamique :
-
Si
match_mapping_type
Non spécifié, Mais le modèle peut correspondre à au moins un type de cartographie prédéfini , Le fragment de carte est considéré comme valide . Si un champ peut être indexé par différents types au moment de la correspondance ,Alors, dansLors de l'indexation
Une erreur de validation est retournée .Alors...,Recommandationsmatch_mapping_type
Configuré comme prévu JSONType. -
Si vous l'utilisez dans un fragment de carte
{name}
Placeholder, Sauter la validation lors de la mise à jour du modèle dynamique , Parce que le nom est inconnu .
match_mapping_type、match/unmatch、path_match/path_unmatch
- Paramètres du modèle dynamique champ d'exécution
Les modèles dynamiques peuvent définir les champs d'exécution ,Comme suit. Quand ça correspond , Les champs sont mappés au type ip
De Champ d'exécution
.
PUT my-index-000001/
{
"mappings": {
"dynamic_templates": [
{
"strings_as_ip": {
"match_mapping_type": "string",
"match": "ip*",
"runtime": {
"type": "ip"
}
}
}
]
}
}
Copier le Code
- match_mapping_type
match_mapping_type
Les types de données peuvent être JSON Détection de l'analyseur .Parce que JSON Aucune distinction long
Et integer
Ou double
Et float
, Il choisit donc toujours un plus large éventail de types de données ,Par exemplelong
Entier etdouble
Nombre de points flottants.
Par exemple,Oui.longMapping asinteger
PUT my-index-000001
{
"mappings": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
},
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
]
}
}
Copier le Code
- match/unmatch
match
Parameter Use Pattern Matching Field name ;Etunmatch
Utiliser le modèle pour exclure les champs correspondants .
"match_pattern": "regex",
"match": "^profit_\d+$"
Copier le Code
path_match
Etpath_unmatch
path_match
Avecpath_unmatch
Paramètres etmatch/unmatchSimilaire, C'est juste que ça correspond au chemin, pas au nom du champ .Par exemple:
PUT my-index-000001
{
"mappings": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.*",
"path_unmatch": "*.middle",
"mapping": {
"type": "text",
"copy_to": "full_name"
}
}
}
]
}
}
Copier le Code
Variables du modèle
{name}
Placeholder atmapping
Remplacer par le nom du champ ;{dynamic_type}
Placeholder atmapping
Est remplacé par un type dynamique .
PUT my-index-000001
{
"mappings": {
"dynamic_templates": [
{
"named_analyzers": {
"match_mapping_type": "string",
"match": "*",
"mapping": {
"type": "text",
"analyzer": "{name}"
}
}
},
{
"no_doc_values": {
"match_mapping_type":"*",
"mapping": {
"type": "{dynamic_type}",
"doc_values": false
}
}
}
]
}
}
Copier le Code
Cartographie des requêtes
GET test/_mapping
Result:
{
"test" : {
"mappings" : {
"properties" : {
"description" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
Copier le Code
Trois、 Cartographie explicite
Cartographie explicite
: Une définition précise de la cartographie des contraintes ,Par exemple:
- Quels champs de chaînes doivent être considérés comme
Champ texte complet
- Quels champs contiennent
Nombre
、Date
OuSituation géographique
Valeur de la date
Format de- Contrôle
Ajouter dynamiquement
Règles personnalisées pour la cartographie des champs
Définir explicitement la cartographie lors de la création de l'index :
PUT /my-index-000003
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
Copier le Code
Mise à jour de la cartographie(Ajouter un attribut):
PUT /my-index-000003/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
Copier le Code
Modifier un champ existant peut invalider les données indexées , Si vous devez modifier la cartographie des champs existants , Veuillez créer un nouveau flux de données et y indexer vos données .
Voir l'index:
# Voir l'index
GET /my-index-000003/_mapping
Copier le Code
API Renvoie la réponse suivante :
{
"my-index-000003" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"email" : {
"type" : "keyword"
},
"employee-id" : {
"type" : "keyword",
"index" : false
},
"name" : {
"type" : "text"
}
}
}
}
}
Copier le Code
Voir les champs spécifiques de l'index :
# Voir les champs spécifiques de l'index
GET /my-index-000003/_mapping/field/age
Copier le Code
API Renvoie la réponse suivante :
{
"my-index-000003" : {
"mappings" : {
"age" : {
"full_name" : "age",
"mapping" : {
"age" : {
"type" : "integer"
}
}
}
}
}
}
Copier le Code
Quatre、Documents de référence
版权声明
本文为[Ici, Manon.]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125173914469D.html