赞
踩
目录
如果通过 PUT 进行全量修改的文档和原来的文档不一样,会发生什么?
mappinig 是对索引库中文档的约束,常见的 mapping 属性如下:
例如如下:
- PUT /heima
- {
- "mappings": {
- "properties": {
- //这里是自定义的 info 信息
- "info":{
- "type": "text", //表示 info 中的信息可以进行分词.
- "analyzer": "ik_smart" //使用 IK 分词器分词
- //这里没有定义 index ,表示默认为词条创建索引
- },
- "email":{
- "type": "keyword", //表示 email 不需要分词,是一个关键字
- "index": "false" //不创建索引
- },
- "createTime": {
- "type": "date", //时间类型
- "format": "yyyy-MM-dd HH:mm:ss", //约定时间格式
- "index": false
- },
- "name":{
- "properties": {
- "firstName": {
- "type": "keyword"
- }
- }
- },
- // ......
- }
- }
- }
ES 中通过 Restful 请求操作索引库、文档. 请求的内容用 DSL 语句来表示.
创建 索引库 和 mapping 的语法如下:
- PUT /索引库名称
- {
- "mappings": {
- "properties": {
- "字段名":{
- "type": "text",
- "analyzer": "ik_smart"
- },
- "字段名2":{
- "type": "keyword",
- "index": "false"
- },
- "字段名3": {
- "type": "date", //时间类型
- "format": "yyyy-MM-dd HH:mm:ss", //约定时间格式
- "index": false
- },
- "字段名4":{
- "properties": {
- "子字段": {
- "type": "keyword"
- }
- }
- },
- // ...略
- }
- }
- }
假设创建以下索引库
- PUT /userinfo
- {
- "mappings": {
- "properties": {
- "info":{
- "type": "text",
- "analyzer": "ik_smart"
- },
- "email":{
- "type": "keyword",
- "index": "false"
- },
- "name":{
- "properties": {
- "firstName": {
- "type": "keyword"
- }
- }
- }
- }
- }
- }
查看索引库语法:
GET/索引库名
示例:
GET /userinfo
删除索引库的语法:
DELETE /索引库名
示例:
DELETE /userinfo
删除后再 GET 就会发现找不到该索引库,如下
索引库和 mapping 一旦创建就无法修改,只可以再原来的基础上新增字段.
语法如下:
- PUT /索引库名/_mapping
- {
- "properties": {
- "新字段名":{
- "type": "integer"
- }
- }
- }
实例如下:
- PUT /userinfo/_mapping
- {
- "properties": {
- "age":{
- "type": "integer"
- }
- }
- }
例如这里我先创建 userinfo 索引库.
接着新增 age 字段:
接着查询 userinfo 索引库
如果是 PUT 的是存在的字段呢,比如 age,将 type 改为 keyword,他就会告诉你 mapper 中 integer 类型不可以修改成 keyword.
这里就类似于 mysql 中向表中添加数据一样,需要先创建表,后向添加数据.
文档操作也是如此,需要先创建索引库,然后才能添加文档.
添加文档语法如下:
- POST /索引库名/_doc/文档id
- {
- "字段1": "值1",
- "字段2": "值2",
- "字段3": {
- "子属性1": "值3",
- "子属性2": "值4"
- },
- // ...
- }
示例如下:
- POST /userinfo/_doc/1
- {
- "info": "大家好,我是练习了两年半的偶像练习生",
- "email": "cxk@itcast.cn",
- "name": {
- "firstName": "c",
- "lastName": "xk"
- }
- }
假设创建以下索引库:
下面添加文档:
查询文档语法:
GET /索引库名/_doc/文档id
示例:
GET /userinfo/_doc/1
删除文档语法:
DELETE /索引库名/_doc/文档id
示例:
DELETE /userinfo/_doc/1
修改文档有两种方式
语法如下:
- PUT /索引库名/_doc/文档id
- {
- "字段1": "值1",
- "字段2": "值2",
- // ... 略
- }
示例如下:
- PUT /userinfo/_doc/1
- {
- "info": "我是练习两年半的偶像练习生",
- "email": "cxk@itcast.cn",
- "name": {
- "firstName": "c",
- "lastName": "xk"
- }
- }
例如原来存在以下文档
现在 PUT 以下操作
然后 GET 查询就是修改后的文档
主要注意 索引名后面是 _update
语法如下:
- POST /索引库名/_update/文档id
- {
- "doc": {
- "字段名": "新的值",
- }
- }
示例如下:
- POST /userinfo/_update/1
- {
- "doc": {
- "email": "ZhaoYun@itcast.cn"
- }
- }
假设原本有文档如下
修改 info 字段的值,如下
通过 GET 获取文档
例如存在以下文档
这里新增字段 age ,结果如下
实际上,这里 es 的处理方式,就是按照 “删除旧文档,新增新文档” 的操作来修改文档的.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。