当前位置: 首页 > news >正文

elasticsearch的索引库操作

索引库就类似数据库表,mapping映射就类似表的结构。我们要向es中存储数据,必须先创建“库”和“表”。

mapping映射属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

  • type:字段数据类型,常见的简单类型有:

    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

    • 数值:long、integer、short、byte、double、float、

    • 布尔:boolean

    • 日期:date

    • 对象:object

  • index:是否创建索引,默认为true

  • analyzer:使用哪种分词器

  • properties:该字段的子字段  

{"age": 321, "weight": 520.1, "isMarried": false, "info": "java实习生", "email": "1216019850@qq.com", "score": [929.1, 199.5, 98.9], "name": {                     "firstName": "白", "lastName": "李" }
}

 

对应的每个字段映射(mapping):

  • age:类型为 integer;参与搜索,因此需要index为true;无需分词器

  • weight:类型为float;参与搜索,因此需要index为true;无需分词器

  • isMarried:类型为boolean;参与搜索,因此需要index为true;无需分词器

  • info:类型为字符串,需要分词,因此是text;参与搜索,因此需要index为true;分词器可以用ik_smart

  • email:类型为字符串,但是不需要分词,因此是keyword;不参与搜索,因此需要index为false;无需分词器

  • score:虽然是数组,但是我们只看元素的类型,类型为float;参与搜索,因此需要index为true;无需分词器

  • name:类型为object,需要定义多个子属性

    • name.firstName;类型为字符串,但是不需要分词,因此是keyword;参与搜索,因此需要index为true;无需分词器

    • name.lastName;类型为字符串,但是不需要分词,因此是keyword;参与搜索,因此需要index为true;无需分词器

索引库的CRUD

创建索引库和映射

PUT /baima
{"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},"email":{"type": "keyword","index": "false"},"name":{"properties": {"firstName": {"type":  "keyword"}}}}}
}

 结果

查询索引库

GET /baima

结果 

修改索引库

索引库一旦创建,无法修改mapping.虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。

PUT /baima/_mapping
{"properties":{"age":{"type":"integer"}}
}

结果

删除索引库

DELETE /baima

结果

文档操作

新增文档

POST /baima/_doc/1,1为id,可以不填,es会帮我随机生成 

POST /baima/_doc/1
{"info": "java实习生","email": "1216019850@qq.com","name": {"firstName": "白","lastName": "李"}
}

结果 

查询文档

根据rest风格,新增是post,查询应该是get,不过查询一般都需要条件,这里我们把文档id带上。

GET /baima/_doc/1

 结果

删除文档

删除使用DELETE请求,同样,需要根据id进行删除 

DELETE /baima/_doc/1

 结果

修改文档

 

修改有两种方式:

  • 全量修改:直接覆盖原来的文档

  • 增量修改:修改文档中的部分字段

全量修改

 全量修改是覆盖原来的文档,其本质是

  • 根据指定的id删除

  • 新增一个相同id的文档

如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了  

POST /baima/_doc/1
{"info": "es实习生","email": "1216019851@qq.com","name": {"firstName": "白白","lastName": "李"}
}

增量修改

增量修改是只修改指定id匹配的文档中的部分字段  

POST /baima/_update/1
{"doc": {"info": "es实习生"}
}

 

http://www.lryc.cn/news/157868.html

相关文章:

  • 把握市场潮流,溯源一流品质:在抖in新风潮 国货品牌驶过万重山
  • 【网络教程】Python如何优雅的分割URL
  • 1998-2014年工业企业数据库和绿色专利匹配
  • Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
  • 算法笔记:堆
  • vue3 判断包含某个字符
  • MySQL的故事——查询性能优化
  • 在外SSH远程连接macOS服务器【cpolar内网穿透】
  • Nosql数据库服务之redis
  • 当AI遇到IoT:开启智能生活的无限可能
  • Qt5界面Qt Designer上添加资源图片后,ModuleNotFoundError: No module named ‘rcc_rc‘ 的终极解决方案
  • 社群运营怎么做?
  • Vite,Vue3项目引入dataV报错的解决方法
  • QT(8.30)常用类与组件,实现登录界面
  • 【Two Stream network (Tsn)】(二) 阅读笔记
  • 记一次语音播报功能
  • Unity设置TextMeshPro文本超出范围显示...
  • Java中级面试题记录(三)
  • spring高级源码50讲-1-8(spring容器与bean)
  • 微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像
  • 2023高教社杯 国赛数学建模A题思路 - 定日镜场的优化设计
  • Qt +VTK+Cmake 编译和环境配置(第二篇,中级篇, 重新编译)
  • 图的学习,深度和广度遍历
  • ChatGPT驱动下,网站AI客服该如何进步和创新
  • Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析
  • 数学建模黄河水沙监测数据分析
  • Unity ProBuilder(自己创建斜面、拐角)
  • 以气象行业为例,浅谈在ToB/ToG行业中如何做好UI设计
  • shiny根据数据的长度设置多个色板
  • 2023高教社杯 国赛数学建模D题思路 - 圈养湖羊的空间利用率