2016-01-20 95 views
2

我有大約1000萬非常扁平(像RDBMS行)存儲在ES中的文檔。每個文檔有10個字段,其中5個字段實際上是枚舉。在Elasticsearch中將字段映射到類型有什麼優勢?

我已經創建了一個映射,將Enum的序號映射爲Short,並在索引文檔時傳遞序號。

Elasticsearch實際上是否將這些值存儲爲索引中的Short?或者他們得到.toString()'ed?當我將一個字段映射到一個數據類型時,實際發生了什麼?

回答

3

由於ES建立在Lucene的基礎之上,因此這裏是查看字段實際存儲和使用的「底層」的地方。

據我所知,Lucene確實存儲的數據不僅僅是String格式。所以要回答你的一個問題,我相信答案是否定的 - 一切都不會得到.toString()'ed。實際上,如果您查看Lucene's document package的文檔,您會看到它有很多數字類型(例如IntFieldLongField等)。

Elasticsearch documentation on Core Types也提到了這樣一個事實:「它採用內Lucene的具體結構,以支持數字 值數類型具有相同的範圍對應的Java 類型。」

此外,Lucene的提供查詢(其ES利用的)特異性與已知的數字術語,如它在Lucene's search package討論的NumericRangeQuery搜索字段設計。 Lucene中的相同數字類型也允許高效排序

另一個好處是數據完整性。就像任何數據庫一樣,如果您只希望字段包含數字數據,並且您的應用程序嘗試插入非數字數據,則在大多數情況下,您會希望該插入失敗。當您嘗試索引其字段值與類型映射不匹配的文檔時,這是ES的默認行爲。 (雖然,你可以使用ignore_malformed禁用數字字段此行爲,如果你願意的話)

希望這有助於...

+0

是的!正是我想弄清楚的。謝謝。 – Kong

+0

不客氣,很高興我能幫上忙! – BrookeB

相關問題