2013-06-10 4 views
1

Je me demande si Elastica ou ElasticSearch permettent de supprimer un seul champ de tous les documents d'un index donné. J'ai trouvé la manière correcte de le faire dans l'API REST, mais en essayant de l'utiliser, cela donne une erreur de syntaxe.Elastica ou ElasticSearch supprime le champ de tous les documents

j'ai écrit

curl -XPOST localhost:9200/products/product/O2bMZYRek5/_update -d '{ 
"script": "ctx._source.remove("Color")" 
}' 

qui est retourné

{"error":"JsonParseException[Unexpected character ('C' (code 67)): was expecting comma to separate OBJECT entries\n at [Source: [[email protected]; line: 2, column: 32]]","status":500} 
+1

Je trouve la solution par l'intermédiaire bash boucle -XPOST 'localhost: 9200/produits/produits/3zknrSRtMj/_update' -d « { "script": "ctx._source.remove (\" color \ ")" } ' Mais maintenant j'ai besoin de le réaliser dans Elastica lib – 1nstinct

+0

Dans votre exemple, la citation escape est manquante dans '" Color "' (devrait être '\" Color \ "'). Il est présent dans le commentaire ci-dessus, où vous utilisez 'curl'. C'est pourquoi l'analyseur se plaint d'attendre une virgule après 'remove (" '. – dhill

Répondre

8

vous pouvez le faire via http api:

curl -XPOST 'http://localhost:9200/goods_city_1/meirong/552899/_update' -d '{ 
    "script" : "ctx._source.remove(\"text\")" 
}' 

ou vous pouvez le faire via java api:

StringBuilder sb = new StringBuilder(); 
for(String stringField : stringFields){ 
    sb.append("ctx._source.remove(\"").append(stringField).append("\");"); 
} 
updateRequestBuilder.setScript(sb.toString()); 

Je l'ai essayé, ça va marcher. (au 0.90.2 au minimum.)

Si vous en avez besoin pour tous les doc dans un index, vous devez mettre toute cette action de mise à jour (ou toutes les 5000 actions) dans une BulkRequest, puis la lancer sur sever.
Ou peut-être "elasticsearch-reindex" (https://github.com/karussell/elasticsearch-reindex) pourrait vous aider, si vous utilisez un alias pour vous approcher des données.

+1

merci, mais j'ai écrit la même réponse dans le commentaire de ma question quelques mois plus tôt – 1nstinct

Questions connexes