1

特定のインデックス内のすべてのドキュメントから 1 つのフィールドを削除する機能を Elastica または ElasticSearch が提供するかどうか疑問に思っています。REST API でこれを行う正しい方法を見つけましたが、それを使用しようとすると、構文エラーが発生します。

私が書いた

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

戻った

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

1 に答える 1

8

これは、http API を介して行うことができます。

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

または、Java API 経由でこれを行うことができます。

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

私はこれを試しました、うまくいくでしょう。(少なくとも 0.90.2 では。)

インデックス内のすべてのドキュメントで機能する必要がある場合は、このすべての更新アクション (または 5000 アクションごと) を 1 つの BulkRequest に入れてから、サーバーにスローする必要があります。
または、「elasticsearch-reindex」( https://github.com/karussell/elasticsearch-reindex ) を使用してデータにアプローチする場合に役立つかもしれません。

于 2013-09-17T11:37:17.863 に答える