怀旧网,博客详情:ES 的基本使用

1、Nacos安装指南

2、Nacos集群搭建

3、Nginx 介绍

4、 Docker安装ES教程

5、ES 的基本使用

原创

ES 的基本使用

索引库mapping的操作

索引库mapping的介绍

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

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

    • 字符串: text(可分词的文本)、keyword(精确值,如:品牌、国家、ip地址)
    • 数值:long、integer、short、byte、double、float
    • 布尔:boolean
    • 日期:date
    • 对象:object
  • index:是否创建索引,默认为true

  • analyzer:使用那种分词器(一般只结合text类型使用)

  • properties:该字段的子字段

索引库mapping的创建

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

PUT /huaijiu  # 创建的索引库名称
{
  "mappings": { # 所有属性值写在mappings下面
    "properties": { # 表示其中一个属性
      "info": { # 一个属性的名称
        "type": "text", # 属性的类型
        "analyzer": "ik_smart" # 指定创建索引的分词器
      },
      "email": {
        "type": "text",
        "index": false # 指定当前字段不创建索引
      },
      "user": {
        "type": "object", 
        "properties": {
          "name": {
            "type": "text",
            "index": false
          },
          "age": {
            "type": "integer",
            "index": false
          }
        }
      }
    }
  }
}

QQ_1725608059678

索引库mapping的查询

GET /huaijiu

QQ_1725608140427

索引库mapping的字段添加

put /huaijiu/_mapping
{
  "properties": {
    "score": {
      "type": "integer",
      "index": false
    }
  }
}

QQ_1725608188764

索引库mapping的删除

delete /huaijiu

QQ_1725608230622

删除后再次查询:

QQ_1725608256995

文档操作

创建文档数据

# 语法:  POST /文档名称/_doc/索引id { 内容json }

POST /huaijiu/_doc/1
{
  "info": "怀旧是真的强啊,太酷啦,奥利给!",
  "email": "444915368@qq.com",
  "user": {
    "name": "怀旧",
    "age": 18
  }
}

QQ_1726736823731

注意右边返回到 _version 试根据你修改的次数依次累加的:例如新增、删除、修改都会让version的值+1

查询文档数据

# 语法:GET /文档名称/_doc/索引id
GET /huaijiu/_doc/1

删除文档数据

# 语法:DELETE /文档名称/_doc/索引id
DELETE /huaijiu/_doc/1

QQ_1726737168825

修改文档

方式一:

全亮修改,回删除旧文档,添加新文档

# 语法和新增一样,直接改变内容即可
PUT /huaijiu/_doc/1
{
  "info": "怀旧是真的强啊,太酷啦,奥利给!",
  "email": "123321@qq.com",
  "user": {
    "name": "怀旧",
    "age": 18
  }
}

QQ_1726737629223

再次执行查询,结果已经发生改变

QQ_1726737669508

方式二:

增量修改,修改指定字段值

# 语法是,编写了哪些字段才针对于哪些字段进行修改(这里修改的时候,需要在外边包一层doc才能进行修改,请求方式也和方式一不一样,这边是POST)

POST /huaijiu/_update/1
{
  "doc":{
    "email": "123456@qq.com"
  }
}

QQ_1726737912281

再次执行查询,结果已经发生改变

QQ_1726737936060

对比两者的差别:

方式一在修改的时候,如果只修改一个字段的内容,那么其他没有写的字段直接默认为空,但是方式二修改的,其他没有填充的字段值内容和原来的数据不变

QQ_1726738096429

查询方式一修改后的结果:

QQ_1726738127300

其他的值直接没有了!

给映射添加别名

**作用:**在对于日志或者其他较大的数据做映射的时候,我们可能会进行将索引拆分(建立多个索引分别存储数据),但是我们在进行数据查询的时候,需要吧所有的数据联合到一起进行查询,这时候别名就可以起到作用了。

没有别名的时候的做法:

首先建立三个索引来代表三个不同的日志文件:

put /log_1
put /log_2
put /log_3

给每个索引添加mapping

# 注意,每个不同的索引,mapping结构保持一致
post /log_(1/2/3 表示三个不同的索引)/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "time": {
      "type": "text"
    }
  }
}

现在给每个索引都加入一些数据:

post /log_1/_create/1
{
  "name": "日志1",
  "time": "第1根"
}
post /log_1/_create/2
{
  "name": "日志2",
  "time": "第2根"
}
post /log_2/_create/3
{
  "name": "日志3",
  "time": "第3根"
}
post /log_2/_create/4
{
  "name": "日志4",
  "time": "第4根"
}
post /log_3/_create/5
{
  "name": "日志5",
  "time": "第5根"
}
post /log_3/_create/6
{
  "name": "日志6",
  "time": "第6根"
}

现在我们想要这三个索引的数据同时查询出来,我们的写法可以是:

get log_1,log_2,log_3/_search

查询结果如下:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "log_1",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "日志1",
          "time": "第1根"
        }
      },
      {
        "_index": "log_1",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "日志2",
          "time": "第2根"
        }
      },
      {
        "_index": "log_2",
        "_id": "3",
        "_score": 1,
        "_source": {
          "name": "日志3",
          "time": "第3根"
        }
      },
      {
        "_index": "log_2",
        "_id": "4",
        "_score": 1,
        "_source": {
          "name": "日志4",
          "time": "第4根"
        }
      },
      {
        "_index": "log_3",
        "_id": "5",
        "_score": 1,
        "_source": {
          "name": "日志5",
          "time": "第5根"
        }
      },
      {
        "_index": "log_3",
        "_id": "6",
        "_score": 1,
        "_source": {
          "name": "日志6",
          "time": "第6根"
        }
      }
    ]
  }
}

通过输出可以看见,能够达成我们想要的效果

现在我们通过别名的方式,改良一下:

post _aliases
{
  "actions": [ 
    {
      "add": {
        "index": "log_1",
        "alias": "log"
      }
    },
    {
      "add": {
        "index": "log_2",
        "alias": "log"
      }
    },
    {
      "add": {
        "index": "log_3",
        "alias": "log"
      }
    }
  ]
}

给三个索引添加上了相同的别名,现在通过别名直接进行查询

get log/_search

查看结果,发现和 get log_1,log_2,log_3/_search 这种方式结果一样:

注意:在查询的时候,我们可以通过别名进行查询,但是在新增、删除和修改,还是需要使用原有的索引名称单独进行

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言