Elasticsearch清空一个对象

Elasticsearch empty an object

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" : {}
    }
}'

这不会用空对象替换旧图像数据,因此在搜索中给我不正确的信息。

试试这个:

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

根据文档的 this sectionnull[][null] 都是等价的,在如下查询中它们将 return 所有没有 image 值的文档:

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