如果小数点后的数字是零,那不就是 return 作为一个双精度值吗?

If the numbers after the decimal is zero, it doesn’t return as a double value?

我在 elasticsearch 5.0 中创建了一个索引,其中包含来自我的 MySQL 数据库的数据。在我的 table 中有一个字段是 string,我需要它作为 ES 中的 double

因此,当我使用 PUT:

为适当的字段创建索引时,我添加了映射
{
  "mappings": {
    "my_type": {
      "properties": {      
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}

在我这样做之后,一个包含小数点后数字的值(即:23.23)returns 该值正确地作为双精度值,但作为小数点后有零的数字(即:23.00)returns 它作为一个字符串本身(即:2300)。

编辑: 这些是我执行的步骤:

  1. 我最初通过 PUT 请求创建了索引 (http://hostmachine:9402/indexname) 以上述映射为 body。

  2. 然后我将数据(从我的 MySQL table)推送到索引使用 logstash。如果需要,我可以提供 logstash conf。

  3. 将数据上传到索引后,我尝试这样查询以检查结果是否显示双精度值。 POST请求(http://hostmachine:9402/indexname/_search?和body如下:

    {  
            "size" : 0,
           "query":{  
              "query_string":{  
                 "query":"myquery"
              }
           },
           "aggs":{  
              "total":{  
                 "terms":{  
                    "field":"userid"
                 },
                 "aggs":{  
                    "total":{  
                       "sum":{  
                           "script":{
                            "lang": "painless",
                            "inline" : "doc['chargeamount'].value"
                           }
                       }
                    }
                 }
              }
           }
        }
    

结果如下图所示,应该是 267472.00:

我哪里错了?任何帮助都将不胜感激。

您需要确保索引创建查询中的映射类型与您在 logstash 配置中的 document_type 完全相同,即 message_logs:

PUT response_summary6
{
  "mappings": {
    "message_logs": {          <--- change this
      "properties": {
        "userid": {
          "type": "text",
          "fielddata": true
        },
        "responsecode": {
          "type": "integer"
        },
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}