0

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

因此,我所做的是在使用以下命令为相应字段创建索引时添加了映射PUT

{
  "mappings": {
    "my_type": {
      "properties": {      
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}

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

编辑:这些是我所做的步骤:

  1. PUT我最初是通过一个请求(http://hostmachine:9402/indexname)以上述映射为主体创建索引的。

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

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

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

结果如下面的快照所示,应该是267472.00

在此处输入图像描述

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

4

1 回答 1

1

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

PUT response_summary6
{
  "mappings": {
    "message_logs": {          <--- change this
      "properties": {
        "userid": {
          "type": "text",
          "fielddata": true
        },
        "responsecode": {
          "type": "integer"
        },
        "chargeamount": {
          "type": "double"
        }
      }
    }
  }
}
于 2016-11-01T16:51:05.663 回答