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 个操作)放入一个 BulkRequest 中,然后将其扔到服务器上。
或者,如果您使用别名来处理您的数据, “elasticsearch-reindex”( https://github.com/karussell/elasticsearch-reindex )可能会对您有所帮助。

于 2013-09-17T11:37:17.863 回答