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

时间:2015-01-15 13:32:46

标签: 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"
    }
  }
}

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

1 个答案:

答案 0 :(得分:2)

这里有2条建议 -

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