ElasticSearch的增删改查

1.基本概念

  • Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。
  1. 索引库(indices):indices是index的复数,代表许多的索引
  2. 类型(type):类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
  3. 文档(document):存入索引库原始的数据。比如每一条商品信息,就是一个文档
  4. 字段(field):文档中的属性
  5. 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性

2 索引操作

2.1 创建索引:put请求
put book
{
  "settings":{
    "number_of_shards":1,			/*分片数量*/
    "number_of_replicas":0			/*副本数量*/
  }
}

  • number_of_shards 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。
  • number_of_replicas 是指每个分片有多少个副本,后期可以动态修改
  • 什么是分片?
    ES中所存数据的文件块,也是数据的最小单元块。假如有2个分片,插入10条数据,默认,每个分片存5条。
2.2 查看索引:get请求
  • get 索引库名
    在这里插入图片描述
  • 我们可以使用*来查询所有索引库 在这里插入图片描述
2.3 删除索引:delete请求
  • delete 索引库名在这里插入图片描述

3. 映射配置

  • 创建索引库,就相当于mysql创建“数据库”。接着我们来配置映射,相当于mysql创建“表结构”。
  • 在ElasticSearch中,我们常配置:
  1. 字段的数据类型
  2. 是否要存储
  3. 是否要索引
  4. 是否分词
  5. 分词器是什么
3.1 创建映射关系
PUT /索引库名/_mapping/类型名称
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true"store": true"analyzer": "分词器"
    }
  }
}

  • 类型名称:基本概念中所说的type,类似于数据库中的表
  • 字段名:类似于数据库中的列名
  1. type:类型,可以是text、keyword、long、short、date、integer、object等
  2. index:是否索引,默认为true
  3. store:是否存储,默认为false
  4. analyzer:分词器,这里的ik_max_word即使用ik分词器
  • 实例
/* 1.先创建索引 */
put czxy

/* 2.创建映射关系 */
put czxy/_mapping/book
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images": {
      "type": "keyword",
      "index": "false"
    },
    "price": {
      "type": "float"
    }
    
  }
}

在这里插入图片描述

3.2 查看映射关系
  • GET /索引库名/_mapping
    在这里插入图片描述
3.3 字段属性详解
  • type
    ∘ \circ  Elasticsearch中支持的数据类型非常丰富
  1. String类型,又分两种:

    ∘ \circ  text修饰字符串,默认进行分词,并生成索引。不能用来过滤、排序和聚合等操作。
    ∘ \circ   keyword修饰字符串,不会分词,不会建立索引。常常被用来过滤、排序和聚合。

  2. Numerical:数值类型,分两类
    ∘ \circ  基本数据类型:long、interger、short、byte、double、float、half_float
    ∘ \circ   浮点数的高精度类型:scaled_float
    ∘ \circ  需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。

  3. Date:日期类型
    ∘ \circ  elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

  • index
  1. index影响字段的索引情况。
    ∘ \circ   true:字段会被索引,则可以用来进行搜索。默认值就是true
    ∘ \circ   false:字段不会被索引,不能用来搜索
  • index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
    但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

  • store

  1. 是否将数据进行额外存储。
    ∘ \circ  Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。
  • 而如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。

4. 数据的操作

4.1 数据的操作
  • 语法:没有id
POST _index/_type/
{
  "属性": "值",
  ....
}

  • 实例
POST czxy/book/
{
  "title": "标题",
  "price": 1234
}

在这里插入图片描述

4.2添加或更新数据
  • 语法:数据存在更新;如果不存在添加(指定id)
PUT _index/_type/_id
{
  "属性": "值",
  ....
}

  • 实例
PUT czxy/book/b001
{
  "title": "标题123",
  "price": 1234
}

在这里插入图片描述

4.3删除数据
  • 语法:
DELETE _index/_type/_id
  • 实例
 DELETE czxy/book/b001

5.查询操作

5.1 简单查询
  • 指定id查询
GET czxy/book/b001
  • 指定id查询,检索指定内容
GET czxy/book/b001?_source=title,price
5.2 高级查询
  • 准备数据
PUT czxy2
PUT czxy2/_mapping/user
{
  "properties": {
    "username": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "city": {
      "type": "keyword"
    },
    "age": {
      "type": "float"
    }
  }
}


PUT czxy2/user/u001
{
  "username": "张三",
  "city": "山西",
  "age": 18
}

PUT czxy2/user/u002
{
  "username": "张四",
  "city": "山东",
  "age": 20
}

PUT czxy2/user/u003
{
  "username": "张三三",
  "city": "山东",
  "age": 22
}

  • 查询所有
    1.  match_all:检索所有的数据
GET _search
{
  "query": {
    "match_all": {}
  }
}

  • 查询指定索引的所有
GET czxy2/_search
{
  "query": {
    "match_all": {}
  }
}

  • 查询部分结果
GET czxy2/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["username","city"]
}

  • 条件查询:匹配查询
GET czxy2/_search
{
  "query": {
    "match": {
      "username": "张三"
    }
  }
}

  • 条件查询:复合查询(多条件查询)
  • bool:多条件拼接
  • must:必须
  • must_not:不含
  • should:可有可无
GET czxy2/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "city": "山东"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
}

  • should并集查询
  • 注意:must和should同时存在的时候,should将会变得不起作用
GET czxy2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "city": "山东"
          }
        },
        {
          "match": {
            "city": "山西"
          }
        }
      ]
    }
  }
}

  • 精确匹配
  • term 进行精确匹配(数据要求:数字、日期、布尔、not_analyzed的字符串(未分词)
GET czxy2/_search
{
  "query": {
    "term": {
      "age": 2
    }
  }
}

  • 范围查询
  • range 用于确定范围,gt 大于、lt 小于、gte大于等于、lte小于等于
GET czxy2/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 19,
        "lte": 21
      }
    }
  }
}

  • 排序
GET czxy2/_search
{
  "query": {
    "match_all": {}
  }, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

  • 分页查询
  • from 设置索引号,从0开始
    *  size 设置每页个数
GET czxy2/_search
{
  "query": {
    "match_all": {}
  }, 
  "from": 0, 
  "size": 1
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值