2016-11-01 19 views
0

我在elasticsearch 5.0中創建索引,其中包含來自我的MySQL db的數據。在我的表中有一個字段是string,我在ES中需要它作爲double如果小數點後的數字爲零,它不會作爲雙精度值返回?

所以我沒有加入的映射,當我使用PUT創建了相應的字段索引:

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

我這樣做後,其小數點後包含數字的值(即:23.23)以double形式正確返回值,但小數點後面有零的數字(即:23.00)將其作爲字符串本身(即:2300)返回。

EDIT: 這些是我沒有以下步驟:

  1. 我最初通過一個PUT請求 (http://hostmachine:9402/indexname)與上述映射作爲 體創建的索引。

  2. 然後,我使用 logstash將數據(從我的MySQL表中)推送到索引。如果需要,我可以提供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

enter image description here

我哪裏去錯了?任何幫助可以讚賞。

+0

你能告訴你已經索引的文檔的例子,你正在運行的命令? – Val

+0

@Val在這個意義上的文檔的例子? 我用這個('http:// hostmachine:9402/indexname')把上面的映射作爲'body'的請求創建了索引。在我創建索引之後,我試圖使用'logstash'將數據上傳到索引。 – Kulasangar

+2

用更簡單的術語,你能顯示你運行的所有命令,以便你可以重現同樣的問題嗎? – Val

回答

1

你需要確保你的索引創建查詢映射類型是完全一樣的,你在你的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" 
     } 
     } 
    } 
    } 
} 
相關問題