2016-01-20 86 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

相关问题