【ElatsticSearch】ES索引库与文档的增删改查

清疚 2023-10-13 11:15 88阅读 0赞

文章目录

  • 一、操作索引库
    • 1、mapping映射属性
    • 2、索引库的CRUD
  • 二、文档操作
    • 1、新增文档
    • 2、查询文档
    • 3、删除文档
    • 4、修改文档
    • 5、注意点

一、操作索引库

在这里插入图片描述

1、mapping映射属性

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

  • type:字段数据类型

    常见的简单类型有:

    字符串: 又可细分为text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址,即拆开就没意义了)
    数值: long、integer、short、byte、double、float、
    布尔: boolean
    日期: date
    对象: object

  • index:是否创建(倒排)索引,默认为true

  • analyzer:使用哪种分词器
  • properties:该字段的子字段

举例:

  1. {
  2. "age": 23,
  3. "weight": 52.1,
  4. "isMarried": false,
  5. "info": "难说",
  6. "email": "9527@csdn.cn",
  7. "score": [99.1, 99.5, 98.9],
  8. "name": {
  9. "firstName": "哈",
  10. "lastName": "哈"
  11. }
  12. }

注意ES中并没有数组类型,"score": [99.1, 99.5, 98.9] ,但是允许某个类型的字段有多个值,只管括号里元素的类型,即这里的score是double类型。

2、索引库的CRUD

创建索引库:

ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下:

  1. PUT /索引库名称
  2. {
  3. "mappings": {
  4. "properties": {
  5. "字段名1":{
  6. "type": "text",
  7. "analyzer": "ik_smart"
  8. },
  9. "字段名2":{
  10. "type": "keyword",
  11. "index": "false"
  12. },
  13. "字段名3":{
  14. "properties": {
  15. "子字段": {
  16. "type": "keyword"
  17. }
  18. }
  19. },
  20. // ...略
  21. }
  22. }
  23. }

示例:

  1. PUT /code9527
  2. {
  3. "mappings": {
  4. "properties": {
  5. "info":{
  6. "type": "text",
  7. "analyzer": "ik_smart" #index用默认的,这里不写了
  8. },
  9. "email":{
  10. "type": "keyword", #email肯定不能分词,类型为字符串下的keyword
  11. "index": "false" # keyword不用指定分词器
  12. },
  13. "name":{
  14. "properties": {
  15. # name字段有嵌套
  16. "firstName": {
  17. "type": "keyword"
  18. },
  19. "lastName": {
  20. "type": "keyword"
  21. }
  22. }
  23. },
  24. // ... 略
  25. }
  26. }
  27. }

在这里插入图片描述
创建的这一整个索引,也就像MySQL中的一张表了。

查询索引库:

  1. GET /索引库名

举例:
在这里插入图片描述

删除索引库:

  1. DELETE /索引库名

举例:

在这里插入图片描述

修改索引库:

ES不支持修改索引库,但可以添加新的字段,如:

  1. PUT /索引库名/_mapping
  2. {
  3. "properties": {
  4. "新字段名":{
  5. # 注意一定是新字段,否则ES会认为你在修改索引库,会拒绝
  6. "type": "integer"
  7. }
  8. }
  9. }

示例:

  1. PUT /code9527/_mapping
  2. {
  3. "properties": {
  4. "age":{
  5. "type": "integer"
  6. }
  7. }
  8. }

在这里插入图片描述
小结:

在这里插入图片描述

二、文档操作

1、新增文档

类比往MySQL的table里insert数据,语法:

  1. # 文档id不写自动生成,但不建议这么写
  2. POST /索引库名/_doc/文档id
  3. {
  4. "字段1": "值1",
  5. "字段2": "值2",
  6. "字段3": {
  7. "子属性1": "值3",
  8. "子属性2": "值4"
  9. },
  10. // ...
  11. }

举例:

  1. POST /code9527/_doc/1
  2. {
  3. "info": "code9527",
  4. "email": "9527@csdn.cn",
  5. "name": {
  6. "firstName": "code",
  7. "lastName": "9527"
  8. }
  9. }

在这里插入图片描述
新增文档还有两种语法:

  1. POST /索引库名/_create/文档id

2、查询文档

语法:

  1. # 查单条文档
  2. GET /索引库名/_doc/文档id
  3. # 查所有文档
  4. GET /索引库名/_search

举例:
在这里插入图片描述

3、删除文档

语法:

  1. DELETE /索引库名/_doc/文档id

举例:
在这里插入图片描述

4、修改文档

全量修改:

根据传入的id,删除旧文档,再添加新文档(delete from where xx=文档id + insert table …):

  1. PUT /索引库名/_doc/文档id
  2. {
  3. "字段1": "值1",
  4. "字段2": "值2",
  5. // ... 略
  6. }
  7. # 和新增文档语法一样,只是请求方式从POST变成了PUT

举例:

  1. PUT /code9527/_doc/1
  2. {
  3. "info": "code9527+++",
  4. "email": "9527@csdn.cn",
  5. "name": {
  6. "firstName": "code",
  7. "lastName": "9527"
  8. }
  9. }

在这里插入图片描述

注意,当传入的文档id不存在,先删后改就成了空删,相当于增加文档了,是个新增操作了。

增量修改:

修改指定字段值,语法:

  1. POST /索引库名/_update/文档id
  2. {
  3. "doc": {
  4. "字段名": "新的值",
  5. }
  6. }

举例:

  1. POST /code9527/_update/1
  2. {
  3. "doc": {
  4. "email": "code9527@csdn.cn"
  5. }
  6. }

在这里插入图片描述

5、注意点

当向ES插入的文档中,字段没有对应的mapping,如:

  1. POST /code9527/_doc/2
  2. {
  3. "info": "code9527",
  4. "email": "9527@csdn.cn",
  5. "name": {
  6. "firstName": "code",
  7. "lastName": "9527"
  8. },
  9. "city":"天津", # 没有mapping的字段
  10. "birtyday":"2000-01-28" # 多了字段
  11. }

结果:
在这里插入图片描述
GET一下:

在这里插入图片描述
即: 插入文档时,es会检查文档中的字段是否有mapping,如果没有则按照默认mapping规则来创建索引。 规则如下:
在这里插入图片描述
如果默认mapping规则不符合你的需求,一定要自己设置字段mapping

小结:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读