Changer _id


(Baptiste Rochez) #1

Bonjour

J'aimerais changer la valeur de _id par une valeur d'un champ lorsque je creer un document.
J'ai essaye avec cette page : https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-id-field.html mais sans succes... j'aimerais utiliser la methode Path

Voici mon code json:

{  
     "document":{
	 "_id" : {
            "path" : "Service-Card.Service-Name",
	        "index" : "not_analyzed",
            "store" : true
        },
      	    "properties":{ 
                      "Service-Card":{"type":"object",
		 	       "properties":{
                                  "ID":{"type":"string"},
                                  "Service-Name":{"type":"string"},
                                  "LiveWebUrl":{"type":"string"},
                                  "Categories":{"type":"nested",
                                      "properties":{
                                           "Selection":{"type" : "string"}
				             }
                        },
                    "Staff":{"type":"nested",
                        "properties":{
                            "Responsible":{"type" : "string"},
                            "Developers" : {"type" : "string"},
                            "Users":{"type": "string"}
                            }
			},	
                     "RSS":{"type":"nested",
                        "properties":{
                            "JiraRRS":{"type" : "string"},
                            "LiveStatusRSS": {"type" : "string"}
                            }
			    }	
                   }
	          }
        }
    }
}

Voici l'exemple pour creer un document:

{ "index" : { "_index" : "myindex", "_type" : "document" } }

{"ID":"T4" ,"Service-Name":"Test4","LiveWebUrl":"http://test4.ch" ,"Categories": {"Selection":"Cat4"},"Staff":{"Responsible":"Admin4","Developers":"Test4IT","User":"Ice"},"RSS":{"JiraRSS": "http://test4.ch/jirarss","LiveStatusRSS":"http://test4.ch/LiveRSS"}}

Lorsque je creer le document l' _id est genere aleatoirement or je voudrais que l _id du document prenne la valeur de Service-Name, une idee ?

J'utilise Advenced Rest Client (un module google chrome ) pour gerer tout ca.
Merci d'avance!


(David Pilato) #2

Faudrait voir exactement les requêtes que tu fais pour avoir une idée exacte.

Néanmoins, je te décourage d'extraire l'_id depuis le document car cette possibilité sera supprimée en 2.0 (de mémoire).


(Baptiste Rochez) #3

Enfaite quand je cree un doc avec des valeurs ca me donne ca (Avec Advanced Rest Client) :

{
_index: "myindex"
_type: "document"
_id: "AU3dnRPqXpa8Oui36Lz7"
_version: 1
created: true
} 

Tout est nikel quand je vais voir le doc a l' adresse en question http://cvl-eladocker:9200/myindex/document/AU3dnRPqXpa8Oui36Lz7/?pretty

Seulement j'aimerais juste changer l'id lors de la creation du document (dans mon cas) car sur l'exemple ici l'id est genere aleatoirement.


(Christophe Boucaut) #4

Si tu veux fixer un id particulier pour le document lors de son ajout, il suffit de préciser toute l'url.

Donc d'utiliser: http://cvl-eladocker:9200/myindex/document/lidquetuveux

Premier exemple sur le site où il ajoute un document avec l'id 1: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}'

(Baptiste Rochez) #5

Ah c'est parfait ca !

Merci ! :smiley:


(system) #6