彈性

2017-08-28 20 views
0

沒有得到整型我一直在想這幾個小時。但是這不能按預期工作。彈性

我推數據通過Python腳本elasticsearch。下面是我想要的整數的一些字段,但它們不是以整數形式存儲的。有時,它們是無類型的,否則它們是字符串。所以,我這樣做

body['fuel_fee'] = int(rows[a][23] or 0) 
    body['late_fee'] = int(rows[a][24] or 0) 
    body['other_fee'] = int(rows[a][26] or 0) 

但我看到他們仍然被存儲爲彈性字符串。我希望sum 對這些操作。

我甚至刪除的索引和改寫了整個數據,所以我可以證實,沒有以前的映射的問題在這裏。

爲什麼我不能讓這些領域的整數?我怎樣才能做到這一點?

編輯 - 我從Postgres數據庫中獲取數據。在postgres中,這些字段以字符串形式存儲,而不是整數形式。它有什麼作用?我認爲不是,因爲我在python中輸入了這個類型。

回答

1

一個字段的數據類型在以下任一方式

  • 當您創建映射(索引任何實際數據之前),並明確地告訴elasticsearch有關字段類型來決定。在你的例子中,fuel_fee字段將被映射到long,並且包含非整數值的任何記錄都將引發錯誤
  • 基於索引的第一個文檔,elasticsearch確定字段類型。它試圖隨後將隨後的文檔字段值轉換爲相同的類型。

現在回到你的問題,你怎麼知道你所有的字段存儲爲字符串,而不是整數?你可以嘗試GET <your-index>/_mapping,看看你的假設是否正確。

如果問題仍然存在,請嘗試以下操作:

  • 索引任何數據之前創建mappings
  • 僅索引1個文檔(使用kibana或通過curl api)並再次檢查映射輸出。
+0

我可以在Kibana看到字段的類型。 Kibana說它是字符串。 – Luv33preet

+0

此外,我使用python推送數據的原因之一是彈性可以獲取每個字段的類型,所以我可以跳過製作映射。但我不知道這裏發生了什麼。 – Luv33preet

+1

請發佈您的索引API的詳細片段,以便我可以提供幫助。我只是試了一下,索引一個整數映射到長類型(不是字符串) –