2016-05-09 47 views
0

我正在將模式添加到elasticsearch,並且在模式中,我試圖將一些字段添加爲之前已被處理爲字符串的多個字段。我創建了一個新的索引並重新處理了數據,但是在新索引中這些字段仍然以字符串形式顯示。彈性搜索忽略映射和長字段顯示爲字符串

從指數端點映射的相關部分:

image_features: { 
    properties: { 
     brightness: { 
      type: "string" 
     }, 
     contrast: { 
      type: "string" 
     }, 
     height: { 
      type: "long" 
     }, 
     sharpness: { 
      type: "string" 
     }, 
     width: { 
      type: "long" 
     } 
    } 
} 

但返回回送:

image_features: { 
    width: "400", 
    height: "400", 
    sharpness: "good", 
    contrast: "good", 
    brightness: "good" 
}, 

我最初創建一個新的索引和使用REINDEX來遷移數據。我也嘗試通過批量操作創建新索引並重新加載所有數據。但是這些值仍然是字符串。

+0

嗨茉莉花,檢查這篇文章http://stackoverflow.com/questions/30976195/elasticsearch-fields-mapping-to-string-by-default-when-indexing我想可能對你有所幫助。 –

+0

所以我實際上已經創建了一個索引,並將這些索引與這些索引定義爲數字。但它是讓我發送數字或字符串,或兩者。我不清楚爲什麼文檔暗示如果它沒有發送正確的數據類型應該會失敗。 –

回答

0

你看到的是源代碼回來,ES將始終按照發送它的方式存儲源代碼,因此它將完全返回您發送給他的內容。

但是,您可以確定image_features.heightimage_features.width已被處理爲長期索引,因爲您的映射將這些字段聲明爲long

如果您希望源代碼返回數值,您需要使用數值發送源代碼(請參閱下文),ES不會轉換源代碼值,這意味着您需要修改您的客戶端進程索引。

image_features: { 
    width: 400, 
    height: 400, 
    sharpness: "good", 
    contrast: "good", 
    brightness: "good" 
}, 
相關問題