2013-10-21 60 views
1

我有一個包含大量數據的JSON。現在,所有的字段每次都沒有固定類型的數據。例如,某些Ids有時會顯示爲完美整數,如123,但有時候它會顯示爲String,如a123ElasticSearch中的部分類型映射

默認情況下,index.mapper.dynamictrue。因此,類型映射會根據首次收到的索引(While creating the index for first set of JSON data)的數據自動定義。現在我們假設,我的第一組數據的Id值爲123,因此Id的類型映射爲Integer。因此,當某些數據的IdString(如a123)時,它會拋出異常,因爲該類型映射到Integer

我們可以通過將index.mapper.dynamic: false放入elasticsearch.yml來關閉動態類型映射。但它會禁用所有字段的類型映射。我想要有Partial Type Mapping。對於一些字段,如date,我想以特定格式爲datetime進行類型映射。

所以我的目標是隻實現JSON數據的幾個字段的類型映射。因此,如果JSON中有20個字段,那麼我打擾4個字段的類型,如果其他16個字段被認爲是String,那麼我也可以。

有什麼辦法可以實現這種局部類型映射嗎?我正在使用Java客戶端。

回答

1

簡答題 - 沒有。

稍長 - ElasticSearch不是無模式 - 它是動態的。這意味着每個字段的都有一個類型,但是這種類型不需要事先指定,但可以根據遇到的第一個值動態確定。 但是再次 - 沒有映射的領域沒有這樣的事情。您不能擁有包含不同類型值的字段。 如果這是你必須擁有的東西,你可以將這個字段的所有值轉換爲字符串。