web-dev-qa-db-fra.com

Créer ou mettre à jour le mappage dans elasticsearch

Je suis nouveau chez Elasticsearch et je travaille actuellement sur la mise en œuvre d'un geo_distance filtre pour la recherche. A partir de maintenant, mon index a le mappage suivant (j'ai supprimé certains champs):

{
advert_index: {
   mappings: {
      advert_type: {
         properties: {
            __v: {
               type: "long"
            },
            caption: {
               type: "string"
            },
            category: {
               type: "string"
            },
            **location: {
            type: "long"
            },**

         }
      }
   }
}

Le champ geo_distance va être implémenté sur le champ emplacement, où un exemple d'exemple ressemble à ceci:

"location": [
               71,
               60
            ],

C'est à dire. est au format geoJSON [lon, lat].

Je comprends que je devrai mettre à jour mon index pour que le champ emplacement soit de type geo_point, comme décrit dans la documentation ( mapping-geo-point ). Il semble que je doive supprimer l'index et en créer un nouveau, mais je ne suis pas en mesure de le faire.

Suis-je sur la bonne voie? J'apprécierais beaucoup si quelqu'un pouvait m'aider avec la façon dont je pourrais créer un nouvel index ou mettre à jour mon index existant avec le type de données correct.

Merci beaucoup!

48
Axelfran

En règle générale, vous pouvez mettre à jour votre mappage d'index en utilisant le mappage put api (référence ici ):

curl -XPUT 'http://localhost:9200/advert_index/_mapping/advert_type' -d '
{
    "advert_type" : {
        "properties" : {

          //your new mapping properties

        }
    }
}
'

C'est particulièrement utile pour ajouter de nouveaux champs. Toutefois, dans votre cas, vous tenterez de modifier le type d'emplacement, ce qui provoquera un conflit et empêchera l'utilisation du nouveau mappage.

Vous pouvez utiliser l’API de mappage pour ajouter une autre propriété contenant l’emplacement sous la forme d’un tableau lat/lon, mais vous ne pourrez pas mettre à jour la précédente. champ de localisation lui-même.

Enfin, vous devrez réindexer vos données pour que votre nouvelle cartographie soit prise en compte.

La meilleure solution serait vraiment de créer un nouvel index .

Si votre problème avec la création d'un autre index est un temps d'arrêt, vous devriez jeter un œil à alias pour que tout se passe bien.

62
ThomasC

Veuillez noter qu'il y a une erreur dans l'URL fournie dans cette réponse:

Pour une demande de mappage PUT: l'URL doit être comme suit:

http: // localhost: 9200/name_of_index/_mappings/document_type

et pas

http: // localhost: 9200/name_of_index/type_document/_mappings

6
user2076066