zoukankan      html  css  js  c++  java
  • ES中index和type区分

    参考:
    https://bayescafe.com/database/elasticsearch-using-index-or-type.html
    https://www.cnblogs.com/huangfox/p/9460361.html

    elasticsearch-中的索引与类型的前生今世

    1. type理解

    1.1 Type 是什么

    使用 type 允许我们在一个 index 里存储多种类型的数据,这样就可以减少 index 的数量了。在使用时,向每个文档加入 _type 字段,在指定 type 搜索时就会被用于过滤。使用 type 的一个好处是,搜索一个 index 下的多个 type,和只搜索一个 type 相比没有额外的开销 —— 需要合并结果的分片数量是一样的。

    但是,这也是有限制的:

    • 不同 type 里的字段需要保持一致。例如,一个 index 下的不同 type 里有两个名字相同的字段,他们的类型(string, date 等等)和配置也必须相同。
    • 只在某个 type 里存在的字段,在其他没有该字段的 type 中也会消耗资源。这是 Lucene Index 带来的常见问题:它不喜欢稀疏。由于连续文档之间的差异太大,稀疏的 posting list 的压缩效率不高。这个问题在 doc value 上更为严重:为了提高速度,doc value 通常会为每个文档预留一个固定大小的空间,以便文档可以被高速检索。这意味着,如果 Lucene 确定它需要一个字节来存储某个数字类型的字段,它同样会给没有这个字段的文档预留一个字节。未来版本的 ES 会在这方面做一些改进,但是我仍然建议你在建模的时候尽量避免稀疏。[1]
    • 得分是由 index 内的统计数据来决定的。也就是说,一个 type 中的文档会影响另一个 type 中的文档的得分。

    这意味着,只有同一个 index 的中的 type 都有类似的映射 (mapping) 时,才应该使用 type。否则,使用多个 type 可能比使用多个 index 消耗的资源更多。

    1.2 我应该用哪个

    这是个困难的问题,它的答案取决于你用的硬件、数据和用例。首先你要明白 type 是有用的,因为它能减少 ES 需要管理的 Lucene Index 的数量。但是也有另外一种方式可以减少这个数量:创建 index 的时候让它的分片少一些。例如,与其在一个 index 里塞上 5 个 type,不如创建 5 个只有一个分片的 index。

    在你做决定的时候可以问自己下面几个问题:

    1. 你需要使用父子文档吗?如果需要,只能在一个 index 里建立多个 type。
    2. 你的文档的映射是否相似?如果不相似,使用多个 index。
    3. 如果你的每个 type 都有足够多的文档,Lucene Index 的开销可以被分摊掉,你就可以安全的使用多个 index 了。如果有必要的话,可以把分片数量设小一点。
    4. 如果文档不够多,你可以考虑把文档放进一个 index 里的多个 type 里,甚至放进一个 type 里。

    2. 移除映射类型的计划

    修改这种模型将会是一个比较大的变化,因此 Elasticsearch 也在尽量少影响用户的前提下,做了一些功能的规划:

    ElasticSearch 5.6.0

    在索引上设置 index.mapping.single_type: true来启用单个类型单个索引,6.0 版本后会进一步增强
    从 5.6.0 版本开始,使用 join 字段来替换 父子关系

    Elasticsearch 6.x

    5.x 创建的索引在 6.x 版中将继续可以使用
    6.x 中将只允许单个类型单个索引, 比较推荐的类型名字为 _doc, 这样可以让索引的API具备相同的路径 PUT {index}/_doc/{id} 和 POST {index}/_doc
    _type 字段名称将不再与 _id 字段合并生成 _uid字段, _uid 字段将作为 _id 的别名。
    新的索引将不再支持父子关系,应该采用 join 字段类进行替代
    _default 映射类型将不推荐使用

    Elasticsearch 7.x

    URL 中的 type 参数做变为可选。例如,所以文档将不再需要 type。指定 id 的 URL 将变为 PUT {index}/_doc/{id}, 自动生成 id 的 URL 为:POST {index}/_doc
    GET | PUT _mapping API 支持查询字符串参数(include_type_name),该参数指示主体是否应包含类型名称。 它默认为 true, 7.x 没有显式类型的索引将使用虚拟类型名称 _doc。

    _default 映射类型将被移除

    Elasticsearch 8.x

    参数 type 在 URL 中将不再被支持
    参数include_type_name 默认seize为 false

  • 相关阅读:
    找出字符串中最长的对称字符串
    spark 数据倾斜的一些表现
    executor.Executor: Managed memory leak detected; size = 37247642 bytes, TID = 5
    机器学习复习笔记
    博客园如何在侧边添加目录
    markdown画图
    用hexo搭建博客
    苏州大学2005-2019复试上机真题及保研期中期末习题
    考研复试面试:计算机网络面试题整理
    python进行日期计算
  • 原文地址:https://www.cnblogs.com/hanks/p/12041514.html
Copyright © 2011-2022 走看看