索引映射(mappings)管理及配置管理

本文深入解析Elasticsearch中字段映射的重要性,包括如何预先定义字段类型,使用mapping管理避免程序问题。同时,介绍了索引库配置管理,如修改分片和副本数,以及如何在不中断服务的情况下重新索引数据。

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

elasticsearch中的文档等价于java中的对象,那么在java对象中有字段(比如string、int、long等),同理在elasticsearch索引中的具体字段也是有类型的。

如果没有指定字段类型,elasticsearch会默认指定。但最好是使用mapping的映射管理,提前指定字段的类型,防止后续的程序问题;

PUT school
{
  "mappings": {
    "logs" : {
      "properties": {"messages" : {"type": "text"}}
    }
  }

获取映射字段

语法:

GET /{index}/_mapping/{type}/field/{field}

GET /school/_mapping/logs/field/number

索引库配置管理

索引库配置

所谓的settings就是用来修改索引分片和副本数的;

比如有的重要索引,副本数很少甚至没有副本,那么我们可以通过setting来添加副本数

DELETE document
PUT document
{
  "mappings": {
    "article" : {
      "properties":
      {
        "title" : {"type": "text"} , 
        "author" : {"type": "text"} , 
        "titleScore" : {"type": "double"} 
        
      }
    }
  }
}
GET /document/_settings

为了提高容错性,我们可以把副本数改成2:

PUT /document/_settings
{
  "number_of_replicas": 2
}

副本可以改,分片不能改

零停机重新索引数据

对于文档的操作,偶尔会遇到这种问题:

某一个字段的类型不符合后期的业务了,但是当前的索引已经创建了,我们知道es在字段的mapping建立后就不可再次修改mapping的值。

1 新建索引库articles1,并添加数据

DELETE articles1
PUT articles1
{  
    "settings":{  
         "number_of_shards":3,  
         "number_of_replicas":1  
    },  
    "mappings":{  
         "article":{  
             "dynamic":"strict",  
             "properties":{  
                 "id":{"type": "text", "store": true},  
                 "title":{"type": "text","store": true}, 
                 "readCounts":{"type": "integer","store": true},  
                 "times": {"type": "text", "index": false}
             }  
         }  
    }  
}


PUT articles1/article/1
{
  "id" : "1",
  "title" : "世界1",
  "readCounts" : 2 , 
  "times" : "2018-05-01"
}

get articles1/article/1

2 新建索引库articles2

DELETE articles2
PUT articles2
{  
    "settings":{  
         "number_of_shards":5,  
         "number_of_replicas":1  
    },  
    "mappings":{  
         "article":{  
             "dynamic":"strict",  
             "properties":{  
                 "id":{"type": "text", "store": true},  
                 "title":{"type": "text","store": true}, 
                 "readCounts":{"type": "integer","store": true},  
                 "times": {"type": "date", "index": false}
             }  
         }  
    }  
}  
}


GET articles2/article/1

3 拷贝数据并验证

POST _reindex
{
  "source": {
    "index": "articles1"
  },
  "dest": {
    "index": "articles2"
  }
}

GET articles2/article/1
<think>首先,用户的问题是:“我想设置Elasticsearch索引及字段映射请问elasticsearchhead插件配置索引字段映射mapping设置”。这涉及到Elasticsearch的索引映射设置,以及如何使用Head插件来配置。从系统级指令中,我需要:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,例如[^1]。-回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。用户还提供了参考站内引用:-引用[1]:关于Elasticsearch的索引映射定义。-引用[2]:关于ElasticsearchHead插件的安装和基本概念。我需要基于这些引用和用户问题来回答。用户的问题是设置索引和字段映射,特别是使用Head插件。关键点:-Elasticsearch的映射(mapping)定义了索引中的字段类型、如何索引等。-Head插件是一个可视化工具,用于管理Elasticsearch。用户的具体请求:配置索引、字段映射(mapping)设置。我的回答应该结构清晰,逐步指导用户如何操作。步骤分解:1.**理解映射(Mapping)**:解释什么是映射,基于引用[1]。2.**介绍Head插件**:基于引用[2],Head插件用于管理索引。3.**步骤指南**:详细说明如何使用Head插件来设置索引映射。4.**注意事项**:包括常见问题或最佳实践。生成相关问题:在回答结束后,生成3-5个相关问题。确保回答真实可靠:基于Elasticsearch官方文档或常见实践。现在,构建回答:-**引言**:简要介绍主题。-**步骤**:逐步指导。-**结尾**:总结和生成问题。使用中文回答。添加引用:在引用参考内容时添加引用标识。例如,在提到映射定义时,添加[^1]。用户提供的引用是示例,我需要自然地融入。最终回答结构:1.解释映射(Mapping)。2.介绍Head插件。3.使用Head插件设置索引映射的步骤。4.生成相关问题。</think>### 设置Elasticsearch索引及字段映射使用Head插件指南 Elasticsearch的索引映射(mapping)定义了索引中字段的类型、索引方式和查询处理规则,类似于关系型数据库的表结构[^1]。例如,映射指定字段是否为文本(text)、数值(integer)或日期类型,以及是否启用分析(analysis)等。使用Head插件(一个可视化工具),您可以轻松配置索引映射。以下是逐步操作指南,确保设置正确可靠(基于Elasticsearch 7.x及以上版本)。 #### 步骤1: 理解映射基础 - **映射核心概念**:映射决定了文档(document)如何被存储和检索。每个索引有一个映射类型(在7.x中仅限一个),它定义了字段的属性和行为[^1]。 - 示例:定义字段`title`为`text`类型(用于全文搜索),字段`price`为`integer`类型(用于范围查询)。 - 公式示例(独立公式):映射规则可表达为字段的索引逻辑: $$ \text{映射规则} = f(\text{字段名}, \text{类型}, \text{索引选项}) $$ 其中$f$表示映射函数[^1]。 #### 步骤2: 安装并启动Elasticsearch Head插件 - 如果您尚未安装Head插件,请参考以下步骤(基于引用[2]): 1. 安装插件:通过npm命令安装(需Node.js环境): ```bash npm install -g grunt-cli git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install grunt server ``` 2. 访问插件:在浏览器打开`http://localhost:9100`,连接到Elasticsearch实例(默认地址`http://localhost:9200`)。 3. 基本功能:Head插件提供索引管理、文档查看和映射编辑界面[^2]。 #### 步骤3: 使用Head插件配置索引映射 - **创建新索引**: 1. 在Head插件主页,点击“索引”标签。 2. 选择“新建索引”,输入索引名称(如`my_index`)。 3. 设置分片(shards)和副本(replicas)数(可选,默认值通常可用)。 4. 点击“创建”按钮。索引创建后,会自动生成一个基础映射(所有字段默认为`text`类型)。 - **设置字段映射**: 1. 在索引列表中找到目标索引(如`my_index`),点击“信息”图标。 2. 导航到“映射”选项卡:这里显示当前映射结构。 3. 添加或修改字段映射: - 点击“添加字段”,输入字段名(如`description`)。 - 选择字段类型:如`text`(用于全文搜索)、`keyword`(用于精确匹配)、`integer`、`date`等。 - 配置索引选项:例如,为`text`字段启用分析器(analyzer),如`standard`(标准分词)。 - 示例映射代码(可直接在Head插件中编辑): ```json { "mappings": { "properties": { "title": { "type": "text" }, "price": { "type": "integer" }, "created_at": { "type": "date" } } } } ``` 4. 保存映射:点击“提交”按钮应用更改。Elasticsearch会立即更新索引结构。 - **验证映射**: - 在Head插件的“复合查询”选项卡中,执行一个测试查询(如`GET my_index/_mapping`),确认映射是否生效。 - 常见错误处理:如果字段类型不匹配(如将数字存为`text`),查询可能失败。Head插件会显示错误提示,帮助您调整映射。 #### 注意事项 - **最佳实践**: - 在索引大量数据前定义映射:避免Elasticsearch自动推断类型(可能导致不一致)。 - 使用动态映射谨慎:Elasticsearch支持动态添加字段,但显式映射更可靠[^1]。 - 性能优化:为频繁查询字段设置合适的类型(如`keyword`代替`text`以加速精确匹配)。 - **引用说明**:映射定义类似于数据库表结构,确保数据高效索引和查询[^1]。Head插件简化了可视化配置过程,适合初学者[^2]。 通过以上步骤,您可以高效设置Elasticsearch索引和字段映射。如果遇到问题,请检查Elasticsearch日志或参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值