在Elasticsearch中将字段映射到类型有什么好处?

时间:2016-01-20 03:47:53

标签: elasticsearch lucene

我有大约1000万个非常扁平的(如RDBMS行)文档存储在ES中。每个文档有10个字段,其中5个字段实际上是枚举。

我创建了一个映射,将Enum的序数映射到Short,并在索引文档时传递序号。

Elasticsearch是否将这些值实际存储为索引中的Short?或者他们得到.toString()'ed?当我将字段映射到数据类型时,“引擎盖下”实际发生了什么?

1 个答案:

答案 0 :(得分: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在数字字段上禁用此行为)

希望这会有所帮助......