Elasticsearch 7.X索引、文档基本操作

ElasticSearch是基于Lucene框架的全文搜索引擎,是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型。

ElasticSearch的对象模型,本质也是存储数据,很多概念与MySQL类似的。

  • 索引(Index):相当于MySQL 实例中的一个 Database,用于定义文档类型的存储;在同一个索引中,同一个字段只能定义一个数据类型;

  • 文档类型(Type):相当于MySQL 中的 Table,描述文档中的各个字段的定义,ElasticSearch 7.0 以后已经废弃

  • 文档(Document):相当于MySQL 中的Row,存储数据,包含一个或多个存有数据的字段;

  • 字段(Field):相当于MySQL 中的的Column,文档的一个属性;

  • 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性

注意:从 ElasticSearch 7.0 开始,Type 被废弃!!!

在 7.0 以及之后的版本中,类型(Type)被废弃了。一个 index 中只有一个默认的 type,默认为_doc索引(Index)既可以被认为对应 MySQL 的Database,也可以认为对应 table。

  • ES 实例:对应 MySQL 实例中的一个 Database。

  • Index 对应 MySQL 中的 Table 。

  • Document 对应 MySQL 中表的记录。

Elasticsearch采用RESTful API的调用风格,在管理和使用ElasticSearch服务时,常用的HTTP动词有下面五个:

  • GET 请求:获取对象

  • POST 请求:更新对象

  • PUT 请求:创建对象

  • DELETE 请求:删除对象

  • HEAD 请求:获取对象基础信息

一、索引(Index)

1.1、创建索引

  • settings:索引库的设置

    • number_of_replicas:副本数量

    • number_of_shards:分片数量

1、创建索引,不指定分片和副本信息

PUT /goods

2、创建索引并指定分片和副本信息

PUT /user

{
  "settings": {
    "index":{
      "number_of_shards":3,
      "number_of_replicas":0
    }
  }
}

1.2、查看索引

1、查看所有索引

GET /_cat/indices/*?v&s=index

2、查看索引信息

GET /user

3、查看索引配置

GET /user/_settings

4、查看所有索引配置

GET /_all/_settings

1.3、删除索引

1、删除索引

DELETE /user

二、映射(Mapping)

  • String类型,分为:

    • text:可分词,不可参与聚合

    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合

  • Numerical:数值类型,分两类

    • 基本数据类型:long、interger、short、byte、double、float、half_float

    • 浮点数的高精度类型:scaled_float

      • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。

  • Date:日期类型

Elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

2.1、创建映射(Mapping)

2.1.1、Elasticsearch 7 先创建索引,再定义映射(Mapping)

1、创建索引

PUT /item
{
  "settings": {
    "index":{
      "number_of_shards":3,
      "number_of_replicas":0
    }
  }
}

2、创建映射 

PUT /item/_mapping
{
  "properties" : {
    "id" : {
      "type" : "long"
    },
    "name" : {
      "type" : "text"
    },
    "title" : {
      "type" : "text",
      "index": true 
    },
    "price" : {
      "type" : "double"
    },
    "brand" : {
      "type" : "keyword"
    },
    
    "category" : {
      "type" : "keyword"
    },
    "images" : {
      "type" : "keyword",
      "index" : false
    }
  }
}

2.1.2、Elasticsearch7创建索引并指定mapping和settings

PUT /item
{
  "mappings" : {
    "properties" : {
      "id" : {
        "type" : "long"
      },
      "name" : {
        "type" : "text"
      },
      "title" : {
        "type" : "text",
        "index": true 
      },
      "price" : {
        "type" : "double"
      },
      "brand" : {
        "type" : "keyword"
      },
      
      "category" : {
        "type" : "keyword"
      },
      "images" : {
        "type" : "keyword",
        "index" : false
      }
    }
  },
  "settings" : {
    "index" : {
      "number_of_shards":3,
      "number_of_replicas":0
    }
  }
}

2.2、查看映射

1、查看映射信息

GET /item/_mapping

三、文档(Document)

3.1、添加文档

3.1.1、POST方式添加文档

POST 用于更新数据,如果不存在,则会创建,如果存在,则更新。

1、指定id方式添加文档

POST /item/_doc/1
{
	"id": 1,
	"name": "小米Redmi K30pro",
	"title": "Redmi K30 Pro骁龙865旗舰处理器8GB+128GB月幕白",
	"brand": "小米",
	"category": "手机",
	"images": "http://img10.360buyimg.com/n1/s450x450_jfs/t1/100503/9/16216/163998/5e78a4e8E38043daa/3c6b4108571f1e91.jpg",
	"price": 2699.00
}

 2、不指定id方式添加文档

POST /item/_doc/
{
	"id": 2,
	"name": "小米Redmi K30pro",
	"title": "Redmi K30 Pro骁龙865旗舰处理器8GB+128GB太空灰",
	"brand": "小米",
	"category": "手机",
	"images": "img14.360buyimg.com//n0/jfs/t1/105365/9/16400/389974/5e78ae27E56994049/eef08d8b49183faa.jpg",
	"price": 2699.00
}

3.1.2、PUT方式添加文档

PUT添加文档,如果不存在,则创建,如果存在,则更新,PUT方式添加文档,必须指定id。

PUT /item/_doc/3
{
	"id": 3,
	"name": "小米电视4A",
	"title": "小米电视4A 60英寸 L60M5-4A 4K2GB+8GB 网络液晶平板电视",
	"brand": "小米",
	"category": "平板电视",
	"images": "http://img13.360buyimg.com/n1/jfs/t1/140177/35/4226/222532/5f242f35Ec044ba21/0797a05dd6094aa3.jpg",
	"price": 1699.00
}

 3.1.3、_create方式创建文档

_create方式创建文档,必须指定id,如果id存在,则创建失败

POST /item/_create/4
{
	"id": 4,
	"name": "小米电视4A",
	"title": "小米电视4A 60英寸 L60M5-4A 4K2GB+8GB 网络液晶平板电视",
	"brand": "小米",
	"category": "平板电视",
	"images": "http://img13.360buyimg.com/n1/jfs/t1/140177/35/4226/222532/5f242f35Ec044ba21/0797a05dd6094aa3.jpg",
	"price": 1699.00
}

3.2、查询文档

1、根据id查询文档

GET /item/_doc/1

2、查询文档部分属性

GET /item/_doc/1?_source=name,price

3.3、更新文档

1、POST覆盖更新文档

POST  /item/_doc/2
{
	"id": 2,
	"name": "小米Redmi K30pro plus",
	"title": "Redmi K30 Pro骁龙865旗舰处理器16GB+256GB月幕白",
	"brand": "小米",
	"category": "手机",
	"images": "http://img10.360buyimg.com/n1/s450x450_jfs/t1/100503/9/16216/163998/5e78a4e8E38043daa/3c6b4108571f1e91.jpg",
	"price": 2999.00
}

2、部分更新文档部分字段

POST /item/_update/4
{
  "doc":{
    "id": 4,
  	"name": "红米Redmi 10A"
  }
}

3.4、删除文档

1、根据id删除文档

DELETE /item/_doc/4

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值