|NO.Z.00014|——————————|BigDataEnd|——|Hadoop&ElasticSearch.V14|——|ELK.v14|集群|索引管理|映射操作|

一、映射操作
### --- 映射操作

~~~     索引创建之后,等于有了关系型数据库中的database。
~~~     Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,
~~~     我们需要设置字段的约束信息,叫做字段映射(mapping)字段的约束包括但不限于:
### --- 字段的数据类型

~~~     是否要存储
~~~     是否要索引
~~~     分词器
~~~     我们一起来看下创建的语法。

一、创建映射字段
### --- 语法

PUT / 索引库名 / _mapping 
{
  "properties": {
    "字段名": {
      "type": "数据类型",
      "index": true, //是否索引,不索引就无法针对这个字段查询
      "store": false, //存储,默认不存储,_source:存储了文档的所有字段内容;从_source字段中可以获取所有字段, 但是需要自己解析, 如果对某个字段指定了存储, 在查询时直接指定返回的字段会增加io开销。 "analyzer": "分词器"
      }
  }
}
~~~     # 语法说明

https://www.elastic.co/guide/en/elasticsearch/reference/7.3/mapping-params.html
//  字段名:    任意填写,下面指定许多属性,例如:
//  type:     类型,可以是text、long、short、dateinteger、object等
//  index:    是否索引,默认为true
//  store:    是否存储,默认为false
//  analyzer: 指定分词器
### --- 示例:发起请求:

~~~     # 示例一:
PUT /yanqi-company-index
~~~输出参数
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "yanqi-company-index"
}
~~~     # 示例二:
~~~     # 响应结果:

PUT /yanqi-company-index/_mapping/
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "job": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "logo": {
      "type": "keyword",
      "index": "false"
    },
    "payment": {
      "type": "float"
    }
  }
}
### --- 上述案例中,就给yanqi-company-index这个索引库设置了4个字段:

~~~     name:企业名称
~~~     job: 需求岗位
~~~     logo:logo图片地址
~~~     payment:薪资
~~~     并且给这些字段设置了一些属性,至于这些属性对应的含义,我们在后续会详细介绍。
二、映射属性详解
### --- type:Elasticsearch中支持的数据类型非常丰富:

~~~     https://www.elastic.co/guide/en/elasticsearch/reference/7.3/mapping-types.html
### --- 我们说几个关键的:

~~~     # String类型,又分两种:
~~~     text:可分词,不可参与聚合
~~~     keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
~~~     # Numerical:数值类型,分两类
~~~     基本数据类型:long、interger、shortbytedoublefloat、half_float
~~~     浮点数的高精度类型:scaled_float
~~~     需要指定一个精度因子,比如10100。
~~~     elasticsearch会把真实值乘以这个因子后存储,取出时再原。
~~~     # Date:日期类型
~~~     elasticsearch可以对日期格式化为字符串存储,
~~~     但是建议我们存储为毫秒值,存储为long,节省空间。

~~~     # Array:数组类型
~~~     进行匹配时,任意一个元素满足,都认为满足
~~~     排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序
### --- Object:对象

~~~     # 如果存储到索引库的是对象类型,例如上面的girl,会把girl变成两个字段:girl.name和girl.age
{
  name:"Jack",
  age:21,
  girl:{
    name: "Rose", age:21
  }
}
### --- index

~~~     index影响字段的索引情况。
~~~     true:字段会被索引,则可以用来进行搜索。默认值就是true
~~~     false:字段不会被索引,不能用来搜索
~~~     index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。 
~~~     但是有些字段是我们不希望被索引的,比如企业的logo图片地址,就需要手动设置index为false
### --- store

~~~     是否将数据进行独立存储。 
~~~     原始的文本会存储在_source 里面,
~~~     默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。
~~~     当然你也可以独立的存储某个字段,只要设置store:true即可,
~~~     获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,
~~~     所以要根据实际业务需求来设置,默认为false
### --- analyzer:指定分词器

~~~     一般我们处理中文会选择ik分词器 ik_max_word ik_smart
三、查看映射关系
### --- 查看单个索引映射关系
### --- 示例:响应:查看所有索引映射关系

~~~     # 语法:
~~~     GET /索引名称/_mapping
~~~     # 方式一

~~~     GET _mapping
~~~     # 方式二

~~~     GET _all/_mapping
### --- 修改索引映射关系
~~~     # 语法:注意:修改映射只能是增加字段操作,做其它更改只能删除索引 重新建立映射 。

PUT /索引库名/_mapping
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}
四、一次性创建索引和映射
### --- 一次性创建索引和映射

~~~     刚才 的案例中我们是把创建索引库和映射分开来做,
~~~     其实也可以在创建索引库的同时,直接制定索引库中的索引,
### --- 基本语法:

put / 索引库名称 {
    "settings": {
        "索引库属性名": "索引库属性值"
    },
    "mappings": {
    "properties": {
    "字段名": {
    "映射属性名": "映射属性值"
    }
    }
    }
}
### --- 案例

PUT /yanqi-employee-index
{
  "settings": {},
  "mappings": {
  "properties": {
  "name": {
  "type": "text",
  "analyzer": "ik_max_word"
  }
  }
  }
}

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(17)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示