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?
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.
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.
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.
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
}
}
}
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"
}
}
}
}
}
}
}