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实习生"
  }
}
相关推荐
小刘鸭!2 小时前
Flink中并行度和slot的关系——任务和任务槽
大数据·flink
LI JS@你猜啊3 小时前
Elasticsearch 集群
大数据·服务器·elasticsearch
筒栗子3 小时前
复习打卡大数据篇——Hadoop HDFS 03
大数据·hadoop·hdfs
SelectDB6 小时前
Apache Doris 创始人:何为“现代化”的数据仓库?
大数据·数据库·云原生
SelectDB6 小时前
飞轮科技荣获中国电信星海大数据最佳合作伙伴奖!
大数据·数据库·数据分析
小刘鸭!7 小时前
Hbase的特点、特性
大数据·数据库·hbase
神奇侠20247 小时前
解决集群Elasticsearch 未授权访问漏洞
elasticsearch
Elastic 中国社区官方博客7 小时前
如何通过 Kafka 将数据导入 Elasticsearch
大数据·数据库·分布式·elasticsearch·搜索引擎·kafka·全文检索
神奇侠20247 小时前
解决单台Elasticsearch 未授权访问漏洞
elasticsearch
nece0017 小时前
elasticsearch 杂记
大数据·elasticsearch·搜索引擎