Home Articles

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

Asked
Viewed 283 times
2

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

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

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

1 Answer

  • 3

    由于ES是 Build 在Lucene之上的,因此可以查看字段实际存储和使用“引擎盖”的地方 .

    据我所知,Lucene实际上存储的数据不仅仅是String格式 . 所以回答你的一个问题,我相信答案是否定的 - 一切都没有得到.toString()'ed . 事实上,如果您查看Lucene's document package的文档,您会发现它有许多数字类型(例如 IntFieldLongField 等) .

    Elasticsearch documentation on Core Types也提到了这个事实:

    “它使用Lucene中的特定构造来支持数值 . 数字类型与相应的Java类型具有相同的范围 . ”

    此外,Lucene提供专门用于搜索具有已知数字术语的字段的查询(ES利用),例如Lucene's search package中讨论的_1846774 . Lucene中相同的数字类型也允许 efficient sorting .

    另一个好处是数据完整性 . 就像任何数据库一样,如果您只希望字段包含数字数据,并且您的应用程序尝试插入非数字数据,则在大多数情况下您希望该插入失败 . 当您尝试索引其字段值与类型映射不匹配的文档时,这是ES的默认行为 . (但是,如果您愿意,可以使用 ignore_malformed 在数字字段上禁用此行为)

    希望这可以帮助...

Related