web-dev-qa-db-fra.com

Spécifiez quels champs sont indexés dans ElasticSearch

J'ai un document avec un certain nombre de champs sur lesquels je n'ai jamais interrogé, je voudrais donc désactiver l'indexation de ces champs pour économiser des ressources. Je crois que je dois désactiver le _all field , mais comment spécifier alors quels champs sont indexés?

21
Michael

Par défaut, tous les champs sont également indexés dans le champ spécial _ all , qui fournit la fonction dite catchall dès la sortie de la boîte. Cependant, vous pouvez spécifier pour chaque champ de votre mappage si vous souhaitez l'ajouter au champ _all ou non, via include_in_all option:

"person" : {
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes", "include_in_all" : false
        }
    }
}

L'exemple ci-dessus désactive le comportement par défaut du champ nom, qui ne fera pas partie du champ _all.

Sinon, si vous n'avez pas du tout besoin du champ _all pour un type spécifique, vous pouvez le désactiver comme ceci, encore une fois dans votre mappage:

"person" : {
    "_all" : {"enabled" : false},
    "properties" : {
        "name" : {
            "type" : "string", "store" : "yes"
        }
    }
}

Lorsque vous le désactivez, vos champs seront toujours indexés séparément, mais vous n'aurez pas la fonctionnalité catchall fournie par _all. Vous devrez alors interroger vos champs spécifiques au lieu de compter sur le champ spécial _all, c'est tout. En fait, lorsque vous interrogez et ne spécifiez pas de champ, elasticsearch interroge le champ _all sous le capot, sauf si vous remplacez le champ par défaut à interroger.

32
javanna

Chaque champ de chaîne a index param dans la configuration de mappage, qui par défautanalyzed. Cela signifie qu'en plus du champ _all, chaque champ est indexé uniquement.

Et pour le _ tout champ il est dit en référence que:

Par défaut, il est activé et tous les champs y sont inclus pour en faciliter l'utilisation.

Donc, pour désactiver complètement l'indexation d'un champ, vous devez spécifier (si le champ _all est activé):

    "mappings": {
        "your_mapping": {
            "properties": {
                "field_not_to_index": {
                    "type": "string",
                    "include_in_all": false,
                    "index": "no"
                }
            }
        }
    }

Pour les champs qui doivent être interrogés sur leur inclusion dans le champ _all (avec "index": "no" pour économiser des ressources) si vous interrogez à travers le champ _all, ou si vous interrogez sur ces champs utilisez uniquement le paramètre index avec n'importe quelle valeur positive (analyzed ou not_analyzed) et désactivez le champ _all pour économiser les ressources.

14
Sergii Golubev

Voici une page de documentation importante pour comprendre les paramètres d'index dans la recherche élastique http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html

Pour votre problème, vous devriez idéalement définir l'indicateur "index" sur non dans les propriétés du champ.

3
Pankaj Garg

Vous pouvez utiliser le champ enabled pour désactiver un champ particulier ou tout le mappage. ElasticSearch Doc

Désactivez le mappage de champ (c'est-à-dire session_data champ)

{
  "mappings": {
    "_doc": {
      "properties": {
        "session_data": { 
          "enabled": false
        }
      }
    }
  }
}

Désactiver l'intégralité du mappage

{
  "mappings": {
    "_doc": { 
      "enabled": false
    }
  }
}
2
Rashidul Islam

Définissez l'index dynamique et _all index sur false. Spécifiez les champs requis dans le mappage. https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-mapping.html

{
   "mappings":{
      "candidates":{
         "_all":{
            "enabled":false
         },
          "dynamic": "false", 
         "properties":{
            "tags":{
               "type":"text"
            },
            "derivedAttributes":{
               "properties":{
                "city":{
                     "type":"text"
                  },
                  "Zip5":{
                     "type":"keyword"
                  }
               }
            }
         }
      }
   }
}
1
subbu