欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

elasticsearch映射相关字段定义,属性定义,及动态映射(marvel插件方式)mapping

程序员文章站 2024-03-02 20:03:04
...

 

1.什么是Mapping映射?

映射:创建索引的时候,可以预先定义字段的类型及相关属性

作用:这样会让索引建立的更加的细致和完善

分类:静态映射和动态映射

Type ES type Description
String,Varchar,Text string 文本类型
Integer integer 整型
Long long 长整型
Float float 浮点型
Double double 双精度浮点型
Boolean boolean 布尔型
Date/Datetime date 日期类型
Bytes/Binary binary 字节型

2.映射的属性方法

除了定义字段的类型,还可以给字段添加相关的属性

属性 描述 适用类型
store 值为:yes或者no,设为yes就是存储,no就是不存储,默认值是no all
index

值为:analyzed,not_analyzed或者no

analyzed索引且分析

not_analyzed索引但不分析

no 不索引这个字段,这样就搜索不到

默认值是analyzed

string(其他类型只能设置为no或not_analyzed)
null_value 如果字段是空值,通过它可以设置一个默认值,比如“null_value”:"NA" all
boost 设置字段的权值,默认值是1.0 all
index_analyzer 设置一个索引时用的分析器 all
search_analyzer 设置一个搜索时用的分析器 all
analyzer 可以设置索引和搜索时用的分析器,默认下elasticsearch使用的是standard分析器,除此之外,你还可以使用whitespace,simple,english这三种内置的分析器 all
include_in_all 默认下elasticsearch会为每一个文档定义一个特殊的域_all,它的作用就是每一个字段都将被搜索到,如果你不想让某个字段被搜索到,那么久在这字段里定义一个include_in_all=false,默认值是true all
index_name 定义字段的名称;默认值是字段本身的名字 all
norms norms的作用是根据各种规范化因素去计算权值,这样方便查询,在analyzed定义字段里,默认值是true,not_analyzed是false all

3.动态映射

3.1什么是动态映射?

文档中碰到一个以前没见过的字段时,动态映射可以自动决定该字段的类型,并对该字段添加映射。

3.2如何配置动态映射?

通过dynamic属性进行控制

true:默认值,动态添加字段;false:忽略新字段;strict:碰到陌生字段,跑出异常

3.3使用范围?

适用在根对象上或者object类型的任意字段上

 

案例:

1).建立映射

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"}
        
      }
    }
  }
}

2).动态映射

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}
        
      }
    }
  }
}

4. 管理映射

4.1获取映射信息

1)获取某个索引的映射信息

GET /library/_mapping

2)获取某个索引下某个type的映射信息

GET /library/_mapping/books

3)获取这个集群内所有的映射的信息

GET /_all/_mapping

4)获取这个集群内某两个或者多个type的映射信息

GET /_all/_mapping/books,bank_account

 

4.2更新映射信息
更新修改mapping映射

很遗憾,mapping一旦建立,就不能修改现有的字段映射

如果要推倒现有的映射,就得重新建立一个索引,然后重新定义映射

然后把之前的索引里的数据导入到新建立的映射里面

方法步骤:

1)给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2

2)运行:PUT /现有索引/_alias/别名A

3)新创建一个索引,定义好最新的映射

4)将别名指向新的索引,并且取消之前索引的指向,运行步骤5

5)运行:

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "现有索引名",
        "alias": "别名A"
      },
      "add": {
        "index": "新建索引名",
        "alias": "别名A"
      }
    }
  ]
}

4.3删除映射信息

3种方式供使用

DELETE /library/books
DELETE /library/books/_mapping
DELETE /library/_mapping/books,bank