Elasticsearch清空一个对象

时间:2015-01-21 16:48:31

标签: elasticsearch

ES新手。我正在尝试创建用户索引,这将允许访问者搜索用户。为了确保我可以在搜索结果上显示个人资料图片,我还有一个图像对象。我的数据如下所示。

"_source": {
     "username": "pewpewlasers",
     "name": "Pew Pew",
     "image": {
          "filename": "filename.jpg",
          "uid": 14
     }
}

我所做的是每次这些数据发生变化时,我都会使用更新API(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html)来更新字段。除非用户删除个人资料图片,否则此功能非常有效。

通常我会发送一个请求:

curl -XPOST 'localhost:9200/test/users/1/_update' -d '{
    "doc" : {
        "image" : {
                    "filename": "newfilename.jpg",
                    "uid": 15
                }
    }
}'

效果很好。但是,每当用户删除个人资料图片时,我都会尝试发送以下请求:

curl -XPOST 'localhost:9200/test/users/1/_update' -d '{
    "doc" : {
        "image" : {}
    }
}'

这不会将旧图像数据替换为空对象,从而在搜索中给出错误的信息。

1 个答案:

答案 0 :(得分:1)

试试这个:

curl -XPOST 'localhost:9200/test/users/1/_update' -d '{
  "doc": {
    "image": null
  }
}'

从文档的this section开始,null[][null]都是等效的,在如下所示的查询中,它们会返回所有不存在的文档具有image的值:

{
  "query": {
    "filtered": {
      "filter": {
        "missing": {
          "field": "image"
        }
      }
    }
  }
}