Elasticsearch7中的mapping设置以及变化

本文介绍了Elasticsearch7中废弃mapping类型的原因和新的设置方式。从7.0版本开始,不能再为_doc设置映射,而是将每个类型的document设置为独立的index。在API使用上,_doc替代了document type,例如在_index/_doc/{id}进行CRUD操作。Search API中不再包含_type,以提高数据稠密度和Lucene的压缩效率。
摘要由CSDN通过智能技术生成

简述

在Elasticsearch7.0之前,我们将每个文档存储在index中,并分配一个映射类型,映射类型用于标识索引的文档或实体的类型,比如:在一个register 索引中,我们可能设置user类型和information类型。在user类型中可能存在username、age、sex等字段,information中可能存在username、password、createtime等字段,我们在检索的时候,在url中可以同时指定检索的type,比如

GET register/user,information/_search

进行查询。

但是在Elasticsearch7.0以后中放弃了mapping中type的设置,例如,我们如果想通过如下的方式指定doc的字段属性时,就会抛出异常

{
    "mappings":{
        "doc":{
            "properties":{
                "title":{
                    "type":"text",
                    "similarity":"BM25"
                }
            }
        }
    }
}

异常信息如下:

{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"Root mapping definition has unsupported

Elasticsearch,"type" 是用于定义文档在索引内部如何被组织的一个属性名称。它是 Elasticsearch 实现数据分层的重要组成部分。当我们在创建索引入口(索引映射)时,我们可以指定一个或多个 "type" 来描述存储在索引的不同类别的数据。这种设计使得搜索引擎能够对各种不同结构的数据进行高效处理和搜索。 ### Elasticsearch type 的作用 1. **数据分类**:允许将相似或相关性质的数据存储在同一索引的不同部分。每个 type 表示索引一组具有共同字段结构的数据类别。 2. **查询灵活性**:通过类型,查询变得更有针对性和高效。用户可以根据需要检索特定类型的数据,而不影响索引内其他类型的数据。 3. **字段管理**:每个 type 内部可以定义不同的字段以及它们的类型、属性(如分析器、格式化等)。这样的灵活性有助于定制数据的索引和搜索行为。 4. **API 约定**:在旧版本的 Elasticsearch ,所有请求数据都会使用默认的 type “_doc”。从7.x 版本开始,Elasticsearch 引入了一种更细粒度的方式,允许通过 API 参数指定 type。 5. **过渡到更精细的分隔**:随着 Elasticsearch 的演进,从简单的类型转换到了更精细的“index pattern”和数据模型的概念,类型的作用逐渐转变为引导更高级的索引策略和数据组织逻辑。 ### Elasticsearch type 的使用变化 从早期版本到最新的 Elasticsearch,type 的使用经历了一些改变: - **7.x 版本及之后**:引入了“index pattern”的概念替代了传统的 type,使得索引布局更加灵活,支持更复杂的多层级数据组织和搜索需求。 - **从文档到数据模型**:随着对数据模型的关注增加,Elasticsearch 开始鼓励用户构建更复杂的数据结构,其类型的概念逐步淡化,转而强调数据模型和字段层次的设计。 ### 示例 假设在一个博客应用,你可以有一个名为 “articles”的索引,它包含多个 type,比如:“posts”,专门用于存放文章;“comments”,用于存放评论。 ```json PUT articles/_mapping { "mappings": { "posts": { "properties": { "title": {"type": "text"}, "content": {"type": "text"}, "author_id": {"type": "keyword"} } }, "comments": { "properties": { "text": {"type": "text"}, "post_id": {"type": "integer"}, "user_id": {"type": "keyword"} } } } } ``` 在这个例子,“posts” 和 “comments” 分别代表了不同类型的数据结构,它们各自拥有独特的字段集合和特性。 --- ### 相关问题: 1. **如何在 Elasticsearch 创建和管理 type?** 2. **Elasticsearch 的 type 与 index pattern 有何区别?** 3. **在实际应用,何时应该创建新的 type?** 请注意,上述内容适用于当前主流的 Elasticsearch 使用习惯,并可能随版本更新有所变化
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值