2014-04-20 8 views
1

Comment modifier le mappage dans l'index existant de elasticsearch? J'ai besoin de définir le type pour l'emplacement sur le type geo_point.Mappage Elasticsearch

{ 
    "stations": { 
     "mappings": { 
      "station": { 
       "properties": { 
        "address": { 
         "type": "string" 
        }, 
        "district": { 
         "type": "string" 
        }, 
        "location": { 
         "properties": { 
          "lat": { 
           "type": "double" 
          }, 
          "lon": { 
           "type": "double" 
          } 
         } 
        }, 
        "name": { 
         "type": "string" 
        } 
       } 
      } 
     } 
    } 
} 

Répondre

2

Cette article explique plusieurs approches à ce problème. Les types ne peuvent pas être modifiés explicitement sur un champ existant.

1

Pour appliquer un nouveau mappage, vous devez réindexer les données. Si vous ajoutez un nouveau champ, cela ne pose aucun problème, pas besoin de réindexer les données.

Pour supprimer l'index existant

curl -XDELETE "http://localhost:9200/index/type/_mapping" 

Pour ajouter geo type de point

curl -XPUT "http://localhost:9200/index/type/_mapping" -d' 
{ 
    "stations": { 
     "mappings": { 
      "station": { 
       "properties": { 
        "address": { 
         "type": "string" 
        }, 
        "district": { 
         "type": "string" 
        }, 
        "location": { 
         "type": "geo_point" 
        }, 
        "name": { 
         "type": "string" 
        } 
       } 
      } 
     } 
    } 
}' 

utilisation au-dessus commande curl pour créer un nouveau mappage à l'index. Pour plus d'informations reportez-vous

+0

ici peut vous s'il vous plaît dites-moi ce que sont les stations et la station est-ce l'indice/type ou quoi ??? Répondez, s'il vous plaît ?? –

+0

stations est l'index et la station est le type. – BlackPOP

+0

merci de nous avoir dit –

0

Une option consiste à utiliser un index de modèle avec la carte que vous voulez et mettre à jour la cartographie (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)

votre nom d'Supposant index est quelque chose comme « myindex ». Vous pouvez créer un mappage en cours d'exécution:

curl -XPUT "http://localhost:9200/_template/myindex_template_1" -d' 
{ 
    "template": "myindex*", 
    "mappings" : { 
    "stations": { 
     "mappings": { 
      "station": { 
       "properties": { 
        "address": { 
         "type": "string" 
        }, 
        "district": { 
         "type": "string" 
        }, 
        "location": { 
         "type": "geo_point" 
        }, 
        "name": { 
         "type": "string" 
        } 
       } 
      } 
     } 
    } 
    } 
}' 

Cela vous permet de créer de nouveaux indices qui commencent par le préfixe « myindex » avec la nouvelle cartographie. L'étape suivante est lue depuis l'index existant vers le nouvel index à l'aide d'un outil tel que Logstash.

Créer un fichier de configuration (par exemple reindex.conf) comme l'exemple (mise à jour avec vos paramètres):

input { 
     elasticsearch { 

      hosts => ["localhost"] # Update with your server hostname here 
      scan => true 
      scroll => "5m" 
      index => "myindex" #update with your existing index name 
      docinfo => true 
     } 
} 

output { 
     stdout { codec => rubydebug } 
     elasticsearch { 
      host => "localhost" 
      protocol => "http" 
      index => "myindex2" # notice I created a new index name 
      document_type => "%{[@metadata][_type]}" 
      document_id => "%{[@metadata][_id]}" 
     } 
} 

Après cela, vous pouvez supprimer l'ancien index et créer un alias pour le nouvel indice afin que votre application peut toujours s'y référer en utilisant l'ancien nom d'index. Exemple:

curl -X DELETE localhost:9200/myindex 

curl -X POST localhost:9200/_aliases -d ' 
{ 
    "actions" : [ 
     { "add" : { "index" : "myindex2", "alias" : "myindex" } } 
    ] 
}' 

Si vous créez jamais myindex3 par exemple, vous pouvez simplement faire:

curl -XPOST 'http://localhost:9200/_aliases' -d ' 
{ 
    "actions" : [ 
     { "remove" : { "index" : "myindex2", "alias" : "myindex" } }, 
     { "add" : { "index" : "myindex3", "alias" : "myindex" } } 
    ] 
}' 
Questions connexes