ElasticSearch 类型从 long 强制转换为 double

Ere*_*bih 1 elasticsearch

我正在使用 ES 版本 2.2.0

我有一个可能有长值或双值的字段。如何让 ElasticSearch 将长值强制加倍,​​以便在插入新文档时不会发生冲突?

例如,如果值是 5,我希望 ES 将其强制转换为 5.0,以便之后可以插入 12.3。

是否有某种动态索引模板可以在插入时自动进行转换?

谢谢您的帮助。

Val*_*Val 5

您可以简单地double在映射中将该字段的类型设置为完成这项工作。您输入该字段的任何内容都将被强制转换为双精度值。

curl -XPUT localhost:9200/index -d '{
  "mappings": {       
     "type": {
        "properties": {
            "myfield": {
                "type": "double"
            }
        }
     }
  }
}'
Run Code Online (Sandbox Code Playgroud)

您需要在创建索引/映射时执行此操作,否则在创建映射后无法更改类型。

更新

您还可以像这样利用动态映射模板

PUT my_index
{
  "mappings": {
    "my_type": {
      "dynamic_templates": [
        {
          "doubles": {
            "match_mapping_type": "long",
            "mapping": {
              "type": "double"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)