Elasticsearch映射Maping

本文介绍了Elasticsearch中的映射概念,包括静态映射和动态映射的区别及配置方式。详细解释了映射属性如store、index等的功能,并演示了如何通过REST API建立和管理映射。

Elasticsearch映射Maping

1.什么是映射
映射:创建索引的时候,可以预先定义字段的类型以及相关属性。
作用:这样会让索引建立的更加细致和完善。
分类:静态映射 和 动态映射

类型和es对应的类型:
String,VarChar, Text:string
Integer:integer
Long:long
Float:float
Double:double
Boolean:boolean
Date/Datetime:date
Bytes/Binary:binary

2.映射的属性方法
除了定义字段的类型,还可以给字段添加相关的属性。
属性01 :store
描述:值为yes或者no,设为yes就是存储,设为no就是不存储,默认值为no。
适应类型:all

属性02:index
描述:值为:analyzed,not_analyzed或者no
analyzed索引且分析
not_analyzed索引但是不分析
no不索引这个字段,这样就搜不到
默认值是analyzed
适用类型:string 其他类型只能设为no或者not_analyzed

属性03:null_value
描述:如果字段是空值,通过它可以设置一个默认值,比如“null_value”:“NA”
适用类型:all

属性04:boost
描述:设置字段的权值,默认是1.0
适用类型:all

属性05:index_analyzer
描述:设置一个索引时用的分析器
适用类型:all

属性06:search_analyzer
描述:设置一个搜索时用的分析器
适用类型:all

属性07:analyzer
描述:可以设置索引和搜索时的分析器,默认下elasticsearch使用的是standard分析器,除此之外,你还可以使用whitespace、simple或english这三种内置的分析器
适用类型:all

属性08:include_in_all
描述:默认下elasticsearch会为每一个文档定义一个特殊的域_all,他的作用就是每一个字段都将被搜索到,如果你搜索到,如果你不想让某个字段被搜索到,那么就在这字段里定义一个include_in_all=false;默认为true
适用类型:all

属性09:index_name
描述:定义字段的名称;默认值是字段本身的名字
适用类型:all

属性10:norms
描述:norms的作用是根据各种规范化因素去计算权值,这样方便查询;在analyzed定义字段里,值是true,not_analyzed是false
适用类型:all

3.动态映射
什么是动态映射?
文档中碰到一个以前没见过的字段时,动态映射可以自动的决定该字段的类型,并对该字段添加映射。
如何配置动态映射?
通过dynamic属性进行控制
true:默认值,动态添加字段;
false:忽略新字段;
strict:碰到陌生字段,抛出异常。
适用范围:
适用在根对象上或者object类型的任意字段上

#jianliyingshe建立映射
POST /library
{
  "settings":{
    "number_of_shards":5,
    "number_of_replicas":1
  },
  "mappings": {
    "books":{
      "properties":{
        "title":{"type":"string"},
        "name":{"type":"string","index":"not_analyzed"},
        "publish_date":{"type":"date","index":"not_analyzed"},
        "price":{"type":"double"},
        "number"{"type":"integer"}

      }
    }
  }
}

#dongtaiyingshe动态映射 
PUT /library
{
  "mappings": {
    "books":{
      "dynamic":"strict",
      "properties":{
        "title":{"type":"string"},
        "name":{"type":"string","index":"not_analyzed"},
        "publish_date":{"type":"date","index":"not_analyzed"},
        "price":{"type":"double"},
        "number"{"type":"object",
          "dynamic":true
        }

      }
    }
  }
}

GET /library/

4.管理映射
获取映射信息
更新映射信息
删除映射信息

#获取某个索引的映射信息 
GET /library/_mapping

GET /bank/_mapping/_mapping/field

#获取某个索引下某个type的映射信息 
GET /library/_mapping/books

# 获取这个集群内所有的映射信息
GET /_all/_mapping

#获取这个集群内某两个或多个type的映射信息
GET /_all/_mapping/books,bank_account

#更新修改Mapping映射
#很遗憾,mapping一旦建立,就不能修改现有的字段映射
#如果要推倒现有的映射,必须重新建立一个索引,然后重新定义映射
#然后把之前索引里的数据导入到新建立的映射里
#--------具体的方法--------
#1.给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2
#2.运行:PUT /现有索引/_alias/别名
#3.新创建一个索引,定义好最新的映射
#4.将别名指向新的索引,并且删除之前索引的执行,运行步骤5
#5.运行:
POST /_aliases
{
"actions":{
    {"remove":{"index":"现有索引名","alias":"别名A"}},
    {"add":{"index":"新建索引名","alias":"别名A"}}
  }
}

#注:通过这几个步骤就实现了索引的平滑过渡,并且是零停机的。

#删除映射
DELETE /library/books
DELETE /library/books/_mapping
DELETE /library/_mapping/books
### ElasticSearch Mapping 文档及相关资料 #### 关于 ElasticsearchMapping Elasticsearch 中的 `Mapping` 是定义索引中字段及其数据类型的配置文件。它类似于关系型数据库中的表结构设计,用于描述如何存储和检索数据[^1]。 通过 REST API 更新映射时可以使用如下代码实现: ```json PUT /my_index/_mapping { "properties": { "email": { "type": "keyword" } } } ``` 如果需要动态添加字段,则可以通过 Java 客户端完成操作。以下是基于 `RestHighLevelClient` 实现的一个示例方法: ```java @Resource(name = "elasticsearchClient") private RestHighLevelClient client; @Test public void testPutMapping() { // 创建请求对象并设置参数 PutMappingRequest putMappingRequest = new PutMappingRequest(INDEX_NAME).type("_doc"); Map<String, Object> likeField = new HashMap<>(); likeField.put("type", "keyword"); Map<String, Object> properties = new HashMap<>(); properties.put("like", likeField); Map<String, Object> mapping = new HashMap<>(); mapping.put("properties", properties); Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("_doc", mapping); putMappingRequest.source(jsonMap); try { AcknowledgedResponse acknowledgedResponse = client.indices().putMapping( putMappingRequest, RequestOptions.DEFAULT ); logger.info("putMapping response:{}", JSON.toJSONString(acknowledgedResponse)); } catch (Exception e) { logger.error("putMapping error:", e); } } ``` 此代码片段展示了如何向现有索引中新增字段 `like` 并将其类型设为 `keyword`[^2]。 #### Elevation Mapping 示例与安装指南 对于机器人领域内的高程图构建工具——`elevation_mapping`,其提供了 ROS 下的地图表示方案。为了成功部署该模块,需先克隆依赖库 `point_cloud_io` 到工作空间目录下,并执行编译命令: ```bash cd ~/ele_map_ws/src git clone https://github.com/ANYbotics/point_cloud_io.git cd .. catkin_make -DCMAKE_BUILD_TYPE=Release ``` 之后即可运行 Ground Truth Demo 来验证功能正常与否[^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值