2017-08-29 2 views
0

J'utilise elasticsearch. Je vois qu'il y a un méta-champ _id pour chaque document. Je veux rechercher le document en utilisant ce méta-champ car je n'ai aucun autre champ comme champ unique dans le document. Mais _id est une chaîne et peut avoir des tirets qui ne peuvent être recherchés que si nous ajoutons un mapping pour le champ type :keyword. Mais il est possible comme mentionné here. Donc maintenant je pense à ajouter un autre champ newField dans le document et le rendre identique à _id. Une façon de le faire est: d'abord créer un document et affecter _id à ce champ et enregistrer à nouveau le document. Mais cela aura 2 connexions ce qui n'est pas très bon. Donc, je veux trouver une solution pour définir newField lors de la création du document lui-même. Est-ce même possible?elasticsearch: copier le méta-champ _id dans un autre champ lors de la création du document

Répondre

0

Vous pouvez rechercher un document qui contient des tirets:

PUT my_index/tweet/testwith- 
{ 
    "fullname" : "Jane Doe", 
    "text" : "The twitter test!" 
} 

Nous venons de créer un document avec un tableau de bord dans son id

GET my_index/tweet/_search 
{ 
    "query": { 
    "terms": { 
     "_id": [ 
     "testwith-" 
     ] 
    } 
    } 
} 

Nous recherchons pour le document dont l'ID suivant: testwith-

{ 
    "took": 9, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "my_index", 
     "_type": "tweet", 
     "_id": "testwith-", 
     "_score": 1, 
     "_source": { 
      "fullname": "Jane Doe", 
      "text": "The twitter test!" 
     } 
     } 
    ] 
    } 
} 

Nous l'avons trouvé. Nous pouvons faire une recherche sur un document qui contient.