如何在elasticsearch中的现有映射中添加新字段时添加默认值

这是我在弹性搜索其中一个子文档时的现有映射

sessions" : {
    "_routing" : {
    "required" : true
    },
    "properties" : {
       "operatingSystem" : {
       "index" : "not_analyzed",
       "type" : "string"
    },
    "eventDate" : {
       "format" : "dateOptionalTime",
       "type" : "date"
    },
    "durations" : {
       "type" : "integer"
    },
    "manufacturer" : {
       "index" : "not_analyzed",
       "type" : "string"
    },
    "deviceModel" : {
       "index" : "not_analyzed",
       "type" : "string"
    },
    "applicationId" : {
       "type" : "integer"
    },
    "deviceId" : {
       "type" : "string"
    }
    },
    "_parent" : {
       "type" : "userinfo"
    }
}

在上面的映射“durations”字段是一个整数数组.我需要通过添加一个名为“durationCount”的新字段来更新现有映射,该字段的默认值应该是durations数组的大小.

PUT sessions/_mapping
{
    "properties" : {
    "sessionCount" : {
      "type" :    "integer"
    }
  }
}

使用上面的映射我能够更新现有的映射,但是我无法弄清楚如何在更新映射时为每个会话文档赋值(对于每个会话文档应该是持续时间数组大小).有任何想法吗 ?

最佳答案 这里有2条建议 –

>您可以使用缺少的过滤器在查询中调整默认值,而不是添加默认值.可以说,您希望基于匹配查询进行搜索 – 而不仅仅是匹配查询,请使用bool查询,其中should子句具有匹配项,missing filter.内部使用筛选查询.这样,那些没有该领域的文件也被记录在案.
>如果您绝对需要该字段中的值用于现有文档,则需要重新索引整个文档集.或者,使用out of box插件,update by query

点赞