十六 mapping手动建立&指定string是否分词

博客介绍了创建index时手动建立mapping及为其添加新属性filed的方法,强调不能修改已有filed。给出了创建mapping和添加新filed的示例代码,还解释了analyzed、not_analyzed和no在索引方面的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建index时可以手动建立mapping,并且可以为mapping添加新的属性filed。但是,不能对已有的filed进行修改。

创建mapping:

PUT /website
{
  "mappings": {
    "article": { ---mapping名称
      "properties": { ---属性filed
        "author_id": {
          "type": "long"
        },
        "title": {
          "type": "text",
          "analyzer": "english"
        },
        "content": {
          "type": "text"
        },
        "post_date": {
          "type": "date"
        },
        "publisher_id": {
          "type": "text",
          "index": "not_analyzed"
        }
      }
    }
  }
}

添加一个新的filed:

PUT /website/_mapping/article
{
  "properties" : {
    "new_field" : {
      "type" :    "string",
      "index":    "not_analyzed"
    }
  }
}

 

analyzed:进行分词
not_analyzed:不分词
no:不能索引

<think>好的,用户现在问的是Elasticsearch中的_mapping方法,我需要详细解释一下。首先,用户可能是刚开始接触Elasticsearch,或者是已经有一定了解但想深入理解mapping的作用。 我需要先确定用户的基础知识,可能他们知道索引和文档的概念,但不太清楚mapping具体是什么。所以应该从基本定义开始,解释mapping类似于数据库的表结构,定义字段的类型和属性。 接下来,用户可能想知道如何查看现有的mapping,所以需要给出GET请求的例子,比如GET /index_name/_mapping,并说明返回的信息包括字段类型、是否被索引等。 然后,用户可能有兴趣如何创建或更新mapping。这时候需要介绍在创建索引时指定mapping,或者使用PUT方法更新现有索引的mapping,但要注意更新时的限制,比如不能修改已有字段的类型,只能添加新字段。 用户可能还会遇到动态mapping的问题,比如Elasticsearch自动推断字段类型,但有时候推断不符合预期,这时候需要手动指定mapping。这部分需要举例说明,比如设置字段为keyword而不是text,或者调整日期格式。 另外,用户可能想了解mapping中的常见参数,比如type、index、analyzer等,这些参数的作用和如何配置。可以举一些例子,比如关闭某个字段的索引,或者使用不同的分词器。 最后,用户可能想知道实际应用中的注意事项,比如提前设计好mapping的重要性,避免后续修改带来的麻烦。需要强调在数据量大的情况下,修改mapping可能会影响性能和稳定性。 总结下来,用户的深层需求可能是如何有效管理和优化索引结构,确保数据的高效存储和检索。因此,回答不仅要介绍_mapping的基本用法,还要提供实际应用中的技巧和最佳实践,帮助用户避免常见陷阱,提升使用Elasticsearch的效率。</think>是的,在 Elasticsearch(ES)中,`_mapping` 是用于定义或查看索引中数据结构的核心方法。它类似于数据库中的表结构(Schema),决定了字段的类型、分析方式、是否被索引等属性。以下是关键点介绍: --- ### **1. 查看 Mapping** 通过 `GET /{索引名}/_mapping` 可以查看索引的当前映射: ```bash GET /my_index/_mapping ``` 返回结果示例: ```json { "my_index": { "mappings": { "properties": { "title": { "type": "text", "analyzer": "standard" }, "date": { "type": "date" } } } } } ``` --- ### **2. 创建/更新 Mapping** 在创建索引时,可直接定义 Mapping: ```bash PUT /my_index { "mappings": { "properties": { "title": { "type": "text" }, "date": { "type": "date" } } } } ``` 若需更新现有索引的 Mapping(仅支持添加新字段): ```bash PUT /my_index/_mapping { "properties": { "new_field": { "type": "keyword" } } } ``` --- ### **3. Mapping 核心概念** - **字段类型(Type)**:如 `text`(全文搜索)、`keyword`(精确匹配)、`long`、`date` 等。 - **动态 Mapping(Dynamic Mapping)**:未定义 Mapping 时,ES 自动推断字段类型(例如字符串默认设为 `text` + `keyword` 子字段)。 - **索引控制(Index)**:通过 `"index": false` 可禁止某字段被索引(节省存储,但不可搜索)。 - **分析器(Analyzer)**:指定分词规则(如 `standard`、`ik_max_word` 中文分词)。 --- ### **4. 动态 Mapping 的调整** 若需控制自动推断规则,可配置动态模板(Dynamic Template): ```bash PUT /my_index { "mappings": { "dynamic_templates": [ { "strings_as_keywords": { "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ] } } ``` --- ### **5. 使用场景** - **优化存储与查询**:合理设置字段类型和分析器,提升性能。 - **避免类型冲突**:例如日期字段若被自动识别为文本,会导致后续写入失败。 - **定制分词需求**:如中文需配置 IK 分词插件。 --- ### **注意事项** - **不可逆修改**:已有字段的类型无法直接修改(需重建索引)。 - **版本兼容性**:不同 ES 版本的 Mapping 语法可能有差异。 如果需要进一步探讨具体案例或配置细节,可以告诉我你的需求场景! 😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值