【问题标题】:What are the advantages of mapping a field to a type in Elasticsearch?在 Elasticsearch 中将字段映射到类型有什么好处?
【发布时间】:2016-01-20 03:47:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: elasticsearch lucene


    【解决方案1】:

    由于 ES 是在 Lucene 之上构建的,因此可以在此处查看字段是如何“在后台”实际存储和使用的。

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

    Elasticsearch documentation on Core Types 也暗示了这一事实:

    "它使用 Lucene 中的特定结构来支持数字 价值观。数字类型的范围与对应的 Java 相同 类型。”

    此外,Lucene 提供了专门为搜索具有已知数字项的字段而设计的查询(ES 利用了这些查询),例如 NumericRangeQuery,在 Lucene's search package 中进行了讨论。 Lucene 中的相同数字类型也允许高效排序

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

    希望这会有所帮助...

    【讨论】:

    • 是的!正是我想要弄清楚的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多