一、创建映射字段
//语法
PUT /索引库名/_mapping
{
"properties":{
"字段名":{
"type":"类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
//示例
PUT /test_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"
}
}
}
字段名:任意填写,下面指定许多属性,例如:
- type:类型,可以是text,long,short,date,integer,object等
- index:是否索引,默认为true
- store:是否存储,默认为false
- analyzer:指定分词器
上述示例中,给test_index索引库设置了4个字段:
- Name::企业名称
- job:需求岗位
- logo:logo图片地址
- payment:薪资
并且给这些字段设置了一些属性。
二、映射属性详解
1、type(数据类型)
Elasticsearch支持非常丰富的数据类型,详见文档
https://www.elastic.co/guide/en/elasticsearch/reference/7.3/mapping-types.html
下面说几个关键的:
- String类型,有分两种
- text:可分词,不可参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
- Numerical:数值类型,分两种
- 基本数据类型:long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float,需要指定一个精度因子,比如10或100,。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
-
Date:日期类型 elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间
-
Array:数组类型
- 进行匹配时,任意一个元素满足,都认为满足
- 排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序
- Object:对象,json格式的对象
{
name:"Jack",
age:21,
girl:{
name: "Rose", age:21
}
}
如果存储到索引库的是对象类型,例如上面的girl,会把girl变成两个字段,girl.name和girl.age
2、index(index影响字段的索引情况)
- true:字段会被索引,则可以用来进行搜索。默认值就是true
- false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。但是有些字段是我们不希望被索引的,例如企业的logo图片地址,就需要手动设置index为false。
3、store(是否将数据进行独立存储)
原始的文本会存储在_source里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。
4、analyzer(分词器)
一般我们处理中文会选择IK分词器(ik_max_word、ik_smart)
三、查看映射关系
查看单个索引映射关系
//语法
GET /索引名称/_mapping
//示例
GET /test_index/_mapping
查看所有索引映射关系
//方式一
GET _mapping
//方式二
GET _all/_mapping
修改索引映射关系
//语法
PUT /索引名称/_mapping
{
"properties":{
"字段名":{
"type": "类型",
"index": true,
"store": false,
"analyzer": "分词器"
}
}
}
四、一次性创建索引和映射
//语法
put /索引库名称
{
"settings":{
"索引库属性名":"索引库属性值"
},
"mappings":{
"properties":{
"字段名":{
"映射属性名":"映射属性值"
}
}
}
}
//示例
PUT /test_index
{
"settings": {},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}