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" : {}
}
}'
这不会将旧图像数据替换为空对象,从而在搜索中给出错误的信息。
答案 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"
}
}
}
}
}