Mise à jour du document indexé dans Elasticsearch

j'essaie de comprendre comment vous mettez à jour un document indexé dans Elasticsearch. Je ne comprends pas comment il fonctionne? Qu'est-ce que le ctx que l'API se réfère à faire? Disons que vous avez un document avec des documents imbriqués que devez-vous faire pour le mettre à jour?

et quelle est la différence entre supprimer le document et indexer la version" mise à jour " par rapport à une simple mise à jour?

15
demandé sur deepwell 2013-03-30 22:52:09

1 réponses

la requête de mise à jour récupère la source d'elasticsearch, la modifie et la renvoie à elasticsearch. Si vous avez déjà une copie du document en utilisant update, cela n'a aucun sens. Il serait généralement plus rapide de simplement indexer la nouvelle version. Cependant, si vous n'avez pas le document facilement disponible mais que vous savez quels changements vous souhaitez apporter au document, il pourrait être plus efficace d'utiliser update. Par exemple, si je n'ai pas de copie du document de voiture, mais je veux ajouter un je peux faire quelque chose comme ceci:

curl -XDELETE localhost:9200/test
curl -XPUT localhost:9200/test -d '{
    "settings": {
        "index.number_of_shards": 1,
        "index.number_of_replicas": 0
    },
    "mappings": {
        "car": {
            "properties": {
                "creators" : {
                    "type": "nested",
                    "properties": {
                        "name": {"type":"string"}
                    }
                }
            }
        }
    }
}
'
curl -XPOST localhost:9200/test/car/1 -d '{
    "creators": [{
        "name": "Steve"
    }]
}
'
echo
curl -XPOST localhost:9200/test/car/1/_update -d '{
    "script" : "ctx._source.creators += new_creator",
    "params" : {
        "new_creator" : {"name": "John"}
    }
}'
echo
curl "localhost:9200/test/car/1?pretty=true"
echo

dans le script de mise à jour ctx est une variable spéciale qui vous permet d'accéder à la source de l'objet que vous voulez mettre à jour. La ctx._source est la version en écriture de la source. Vous pouvez modifier ce document dans le script et la source modifiée sera maintenue comme la nouvelle version du document.

34
répondu imotov 2013-03-30 19:20:39